CentOS7 Nginx に Let’s Encrypt でサイトを SSL 化して SSL証明書の自動更新を設定します。
サイトを SSL 化するのが当たり前の時代になってきました。
Chrome は近い将来、SSL 化していないサイトを閲覧したい際に、アドレスバーで警告を表示するようです。SEO の観点では、検索結果を優遇するという話で、さらに、サイトの高速化にもなるということです。
今年からワイルドカード SSL証明書の発行も始めました Let’s Encrypt。今後、需要はますます高くなっていくでしょう。
Contents
バージョン
- CentOS 7.4
- epel-release 7-11
- certbot 0.24.0
- Nginx 1.12.2-2
インストール
certbot
$ sudo yum install -y epel-release $ sudo yum install -y certbot
Let’s Encrypt の SSL 証明書を発行や更新するための certbot をインストールします。
CentOS7 の場合、certbot は EPEL に用意されていますので、まず、EPEL リポジトリをインストールします。
Nginx
$ sudo yum install -y nginx
サイトを SSL 化するための Web サーバーは、Nginx を使いたいと思います。
CentOS 7 の場合、こちらも certbot 同様に EPEL に用意されています。
Nginx の設定
server { listen 80; server_name leben.mobi; location ^~ /.well-known/acme-challenge/ { root /var/www/letsencrypt; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name leben.mobi; access_log /var/log/nginx/leben.mobi_access.log main; error_log /var/log/nginx/leben.mobi_error.log warn; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_certificate /etc/letsencrypt/live/leben.mobi/fullchain.pem; ssl_trusted_certificate /etc/letsencrypt/live/leben.mobi/chain.pem; ssl_certificate_key /etc/letsencrypt/live/leben.mobi/privkey.pem; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Protocol $scheme; location ^~ /.well-known/acme-challenge/ { root /var/www/letsencrypt; } location / { ... } }
上記の例は、leben.mobi(このブログ)のドメインを使用した際のものです。
SSL 証明書を取得
certbot certonly
$ sudo certbot certonly --webroot -n --agree-tos -m Your E-Mail -w /var/www/letsencrypt/ -d leben.mobi
SSL 証明書の取得コマンドです。このコマンドを実行すると、出力がたくさん出てきます。最後の方で、Congratulations! と出れば取得できたことになります。
certbot が認証するために、w オプションで、先ほど Nginx で設定した root のディレクトリを指定します。
メールアドレスは SSL 証明書が更新できない状態になった時などに、Let’s Encrypt から通知を受け取ることができます。
SSL 証明書の自動更新
renew post hook
$ sudo sed -i -e "s/^POST_HOOK=\"\"/POST_HOOK=\"--post-hook 'systemctl restart nginx'\"/" /etc/sysconfig/certbot
certbot は、SSL 証明書を自動更新した時のフックポイントをいくつか用意しています。
/etc/sysconfig/certbot の POST_HOOK を編集し、SSL 証明書を自動更新した後に Nginx を再起動し、SSL 証明書更新を Nginx に反映します。
certbot-renwe.timer
$ sudo systemctl enable --now certbot-renew.timer Created symlink from /etc/systemd/system/timers.target.wants/certbot-renew.timer to /usr/lib/systemd/system/certbot-renew.timer.
certbot に SSL 証明書を自動更新させるために、certbot-renew.timer を有効にします。これで、certbot が有効期限が近くなった証明書を自動更新してくれます。
cron でやる方法もありますが、CentOS7 で EPEL リポジトリの certbot パッケージを利用している場合、certbot-renew.timer が付いていますので、こちらを利用しましょう。
まとめ
CentOS7 Nginx に Let’s Encrypt でサイトを SSL 化して SSL 証明書の自動更新を設定しました。
Let’s Encrypt を導入する前は、苦戦すると思っていたのですが、特につまづく箇所はなく、サクッと導入できました。SSL 化はたくさんのメリットがありますし、Let’s Encrypt は簡単なので、まだの人は、これを機に挑戦してみてください。この記事が参考になれば幸いです。