ブログをLet's EncryptでHTTP/2対応する。

GitHub PagesだったブログをIDCFクラウドに移管しました。

移管した理由は2つ。

Markdownファイルが100を超えてビルドに時間がかかるようになったから。そして、Let's EncryptでSSL/TLS化したかったから!

Let's Encryptで証明書の発行

Let's Encryptの証明書は証明書を利用したいサーバ上で Let's Encrypt Client を実行することで発行することが出来ます。

# Install
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help

# run the client
$ ./letsencrypt-auto certonly --standalone -d blog.yug1224.com

実行すると途中でTUIになり、メールアドレスの入力や規約への同意を求められるので入力。

問題なく完了すると /etc/letsencrypt/live/blog.yug1224.com/ にpemファイルが4つ発行されます。

Nginxに設定を追加

ssl系のディレクティブを設定します。

今回はHTTP/2を使えるようにし、http://でアクセスされた場合はhttps://にリダイレクトするようにして、さらにSSL評価もA+になるようにしました。

SSL A+

まずDH鍵交換に使用するパラメータファイルをOpenSSLコマンドで作成しておきます。

$ cd /etc/letsencrypt/live/blog.yug1224.com/
$ openssl dhparam 2048 -out dhparam.pem

nginx.confは下記の通り。locationディレクティブ等は省略しています。

# HTTP
server {
  listen 80;
  server_name blog.yug1224.com;
  return 301 https://$host$request_uri;
}

# HTTPS
server {
  listen  443 ssl http2;
  server_name localhost
              blog.yug1224.com;

  ssl_certificate     /etc/letsencrypt/live/blog.yug1224.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/blog.yug1224.com/privkey.pem;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
  ssl_prefer_server_ciphers on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;

  ssl_dhparam /etc/letsencrypt/live/blog.yug1224.com/dhparam.pem
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/blog.yug1224.com/chain.pem;
  resolver 8.8.4.4 8.8.8.8;
}

ブラウザで証明書情報を確認出来ますし、HTTP/2 and SPDY indicator があれば青いイナズマが僕を責める!

SSL成功

以上

Let's Encrypt!

Let's EncryptNginx