Apitore blog

Apitoreを運営していた元起業家のブログ

Let's Encryptでstandaloneからwebrootに設定変更する

はじめに

Let's Encryptで証明書を発行する場合、standaloneモードでは80ポートを使います。ということは現在稼働しているウェブサービスを一度落とす必要があり、運用上の問題があります。そこでwebrootモードを使い、稼働中のサービスを落とさずにSSL証明書の発行および更新をしたいと思います。 amarec (20160806-100010)

Let's Encryptでイチからwebrootモードを使う場合

まだLet's Encryptを使ったことがない場合は以下のようにやります。ちなみに2016年8月時点での最新のやり方はcertbotを使うことが推奨されています。使い方は今までのLet's Encryptとほぼ同じです。違う点はcertbotは実行するときに最新版チェック&アップデートを勝手にやってくれることです。当然、自動アップデートは自分でオフに出来ます。certbotは各OS毎にインストールおよび使い方の説明があるので非常にわかりやすいと思います。 amarec (20160806-100017)

インストール

ここではUbuntu14.04 + Nginxの設定で説明します。certbotのページに行けばその他の組み合わせについても解説があります。当然ながら、SSL証明書を発行したいサーバー(=稼働中のサービスがあるサーバー)で下記手順を実行してください。 amarec (20160806-100041) 以下のコマンドを実行します。

$ 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モードに簡単に移行できます。