今まで 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(日)
-
金曜日の社内勉強会で http2 の話 を聞いたこともあり、16:00 頃突然 masutaka.net http2 化の意欲が湧いてきた。この時点ではすぐ出来るだろと思っていた
-
Chef での構成管理がしやすそうな StartSSL で Class 1 の証明書を取得した。必要な CSR(Certificate Signing Request)はほぼ指示通りの以下のコマンドで作成した
$ openssl req -new -nodes -newkey rsa:2048 -keyout yourname.key -out yourname.csr
-
ドメイン認証のために whois に登録したメールアドレスを受取可能にする必要があると気づき、masutaka.net に Postfix をインストールした
-
25 番ポートを開けないとメールが受け取れないことに気づき、開けた
-
StartSSL から何度 Verification メールを送っても受信できず、
$ tail -f /var/log/mail.log
をずっと眺めてた -
ふと、StartSSL にアクセスし直し再送したら、あっさり受信…
-
この辺で迷走。SMTP relay をやりたくなり試行錯誤。結局諦めた
-
443 番ポートを開け、一気に http2 にするも
403 Forbidden
や Chrome だけでERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
が発生したりの大混乱- Mozilla SSL Configuration Generator を参考にはしていた
-
なんとか SSL 化は成功。Chrome からは『接続は古い暗号スイートにより暗号化されています』と言われていたが、AM2:00 になってしまったので就寝
2016-03-14(月)
-
会社の同僚から http2 で Chrome に怒られるのは
ssl_ciphers
(長いやつ)を設定してないからかもとのアドバイス。Qualys SSL Labs の SSL Server Test も教えてもらった。この時点でのスコアは B -
会社に置いていた『nginx実践入門 』もゲットして帰宅
-
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
-
https から http2 へは nginx の設定を以下に変更してあっさり終了
listen 443 ssl; ↓ listen 443 ssl http2;
※ nginx は Ubuntu の PPA で 1.9 系を使っていたため、http_v2_module が含まれていた。
-
Chrome 先生からご指摘を受けているので、このブログで http のリソースを使っている箇所を出来るだけ https に変更。『このブログのはてなブックマーク数』と『Amazon の商品リンク』は出来ず。後日考えることに