今まで http だったこのサイトを http2 対応しました。

静的ファイルもそうですが、このサイトで動いている kibana が体感で速くなった気がします(計測すればよかった)。

SSL 証明書は最近流行りの Let’s Encrypt ではなくて、温かみのある StartSSL で取得しました。パスワードではなく、証明書でのログインがいいですね。

どちらも無料で取得できます。前者はコマンドラインから取得できるが構成管理難しめ、後者はサイト上から手作業で取得が必要だが構成管理は容易、というおおざっぱな違いがあります。

今回学んだことは 「出来るだけ https 対応してから http2 対応すべし」 でした。雑に http2 にしたら 403 Forbidden や、Chrome で ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY が発生しハマりました。

あとは 「早く寝ろ」 でしょうか。日曜日の後半は完全に頭が働いていませんでした…。

nginx の設定では主に以下を学びました。

  • ssl_session_cache
    • 高速化のため、セッションキャッシュを設定する
  • ssl_ciphers
    • より安全にするため、暗号化スイートを明示的に設定する
  • ssl_dhparam
    • より安全にするため、DH パラメータファイルを指定する
  • add_header Strict-Transport-Security
    • より安全にするため、HSTS を用いて常に HTTPS 通信を行う
    • HTTP Strict Transport Security

以下、作業メモです。

2016-03-13(日)

  1. 金曜日の社内勉強会で http2 の話 を聞いたこともあり、16:00 頃突然 masutaka.net http2 化の意欲が湧いてきた。この時点ではすぐ出来るだろと思っていた

  2. Chef での構成管理がしやすそうな StartSSL で Class 1 の証明書を取得した。必要な CSR(Certificate Signing Request)はほぼ指示通りの以下のコマンドで作成した

    $ openssl req -new -nodes -newkey rsa:2048 -keyout yourname.key -out yourname.csr
    
  3. ドメイン認証のために whois に登録したメールアドレスを受取可能にする必要があると気づき、masutaka.net に Postfix をインストールした

  4. 25 番ポートを開けないとメールが受け取れないことに気づき、開けた

  5. StartSSL から何度 Verification メールを送っても受信できず、$ tail -f /var/log/mail.log をずっと眺めてた

  6. ふと、StartSSL にアクセスし直し再送したら、あっさり受信…

  7. この辺で迷走。SMTP relay をやりたくなり試行錯誤。結局諦めた

  8. 443 番ポートを開け、一気に http2 にするも 403 Forbidden や Chrome だけで ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY が発生したりの大混乱

  9. なんとか SSL 化は成功。Chrome からは『接続は古い暗号スイートにより暗号化されています』と言われていたが、AM2:00 になってしまったので就寝

2016-03-14(月)

  1. 会社の同僚から http2 で Chrome に怒られるのは ssl_ciphers (長いやつ)を設定してないからかもとのアドバイス。Qualys SSL Labs の SSL Server Test も教えてもらった。この時点でのスコアは B

  2. 会社に置いていた『nginx実践入門 』もゲットして帰宅

  3. Mozilla SSL Configuration Generator の設定を『nginx実践入門』と照らしあわせて、1つずつ設定。ssl_ciphers を設定したら B から A になり、ssl_dhparam を設定したら A が A+ になった

    • ssl_dhparam ファイルは以下のコマンドで作成した。作成には数分かかった。
    $ openssl dhparam 2048 -out dhparam.pem
    

    🔗 https://www.ssllabs.com/ssltest/analyze.html?d=masutaka.net

    masutaka.net の SSL 診断結果

  4. https から http2 へは nginx の設定を以下に変更してあっさり終了

    listen 443 ssl;
    
    listen 443 ssl http2;
    

    ※ nginx は Ubuntu の PPA で 1.9 系を使っていたため、http_v2_module が含まれていた。

  5. Chrome 先生からご指摘を受けているので、このブログで http のリソースを使っている箇所を出来るだけ https に変更。『このブログのはてなブックマーク数』と『Amazon の商品リンク』は出来ず。後日考えることに

nginx実践入門 amazon.co.jp