はじめに
Let's Encryptで証明書を発行する場合、standaloneモードでは80ポートを使います。ということは現在稼働しているウェブサービスを一度落とす必要があり、運用上の問題があります。そこでwebrootモードを使い、稼働中のサービスを落とさずにSSL証明書の発行および更新をしたいと思います。
Let's Encryptでイチからwebrootモードを使う場合
まだLet's Encryptを使ったことがない場合は以下のようにやります。ちなみに2016年8月時点での最新のやり方はcertbotを使うことが推奨されています。使い方は今までのLet's Encryptとほぼ同じです。違う点はcertbotは実行するときに最新版チェック&アップデートを勝手にやってくれることです。当然、自動アップデートは自分でオフに出来ます。certbotは各OS毎にインストールおよび使い方の説明があるので非常にわかりやすいと思います。
インストール
ここではUbuntu14.04 + Nginxの設定で説明します。certbotのページに行けばその他の組み合わせについても解説があります。当然ながら、SSL証明書を発行したいサーバー(=稼働中のサービスがあるサーバー)で下記手順を実行してください。 以下のコマンドを実行します。
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
$ ./certbot-auto
使い方
webrootモードは以下のコマンドで実行します。ここでは「example.com」と「www.example.com」のSSL証明書を発行するとします。
$ sudo mkdir -p /var/www/example
$ ./path/to/certbot-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com
自動更新
crontabで以下のコマンドを登録してください。
$ ./path/to/certbot-auto renew --quiet --no-self-upgrade
実行ログを残すなら、以下のコマンド郡をシェルスクリプトにして登録してください。
#!/bin/sh
if ! ./path/to/certbot-auto renew --no-self-upgrade > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
nginx -t && nginx -s reload
standaloneモードからwebrootモードへ移行する場合
私はLet's Encryptをstandaloneで実行していたので、証明書の更新のたびにNginxを停止する必要がありました。ここではstandaloneモードからwebrootモードへの移行を解説します。 更新の設定ファイルは、「/etc/letsencrypt/renewal/*.conf」にあります。それを以下のように書きなおしてください。
# 省略
#authenticator = standalone
authenticator = webroot
webroot-path = /var/www/example
www.example.com = /var/www/example
# 省略
おわりに
Let's Encryptは証明書発行時の設定を保存して、更新時はその設定を見て更新してくれます。なので設定ファイルを弄るだけでstandaloneモードからwebrootモードに簡単に移行できます。