let's encrypt の証明書更新
この前の記事で、 let's encrypt の証明書更新を試しました。 しかし、standalone モードでの証明書の更新だったため、本来ホスティングしている Web サーバを止める必要があったりとイケてない状態でした。
証明書を Web サーバに再読込させる時間は仕方ないとしても、正直ダウンタイムは短くしたいですよね。そんなわけで、standalone から webroot に更新方法を変更してみたいと思います。
authenticator の変更と webroot 設定の追加
let's encrypt は証明書を最初に作った時の設定を /etc/letsencrypt/renewal/ 以下に保存してます。
前々回のエントリで作成した設定は /etc/letsencrypt/renewal/test.tnamao.net.conf として保存されていました。
この設定ファイルを書き換えることで、 standalone から webroot への変更ができます。変更内容は以下の設定です。
[renewalparams] セクション
- authenticator を standalone から webroot に変更
- standalone を True から False に変更
- webroot を False から True に変更
webroot_map セクション
- test.tnamao.net = /home/ubuntu/letsencrypt_webroot を追加
変更前後の diff
$ diff /etc/letsencrypt/renewal/test.tnamao.net.conf /etc/letsencrypt/renewal/test.tnamao.net.conf.bak 22c22 < authenticator = webroot --- > authenticator = standalone 25c25 < func = <function renew at 0x7f7bb6796938> --- > func = <function renew at 0x7fac33dc47d0> 29c29 < standalone = False --- > standalone = True 69c69 < webroot = True --- > webroot = False 75d74 < test.tnamao.net = /home/ubuntu/letsencrypt_webroot
nginx の設定変更
nginx の webroot ディレクトリを使えば設定変更は不要です。
が、webroot ディレクトリはコード管理され、rsync などで同期されていることも多いので、let's encrypt が webroot 更新で使う部分だけを別のディレクトリに設定します。 server ディレクティブに以下の設定を追加します。
location /.well-known/ { root /home/ubuntu/letsencrypt_webroot; }
使っている環境によっては、巧く行かないかもしれませんが、良きに計らって設定を追加をしてください。
この .well-known というディレクトリが let's encrypt の webroot モードで使用する URL 及び、ディレクトリ名となります。自動では letsencrypt_root ディレクトリは作られないので、予め作っておきます。
ちなみにコンテンツの root は、こんな感じで設定されてます。
location / { root html; index index.html index.htm; }
そして再起動
$ sudo supervisor restart nginx nginx: stopped nginx: started
これで let's encrypt 用のディレクトリ設定が反映されました。
実際に証明書を更新してみる
standalone で更新するときにあれこれオプションを付けていましたが、今回は色々と省略します。
$ ./letsencrypt-auto renew --force-renewal Checking for new version... Requesting root privileges to run letsencrypt... sudo /home/ubuntu/.local/share/letsencrypt/bin/letsencrypt renew --force-renewal Processing /etc/letsencrypt/renewal/test.tnamao.net.conf new certificate deployed without reload, fullchain is /etc/letsencrypt/live/test.tnamao.net/fullchain.pem Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/test.tnamao.net/fullchain.pem (success)
なんとこれだけ。--standalone や --webroot を指定しない場合は、/etc/letsencrypt/renewal/ 以下にある設定を読み取って、良きに計らってくれるようです。
では、nginx の再起動。standalone の時のように一度止めている訳では無いので次のコマンドで
$ sudo nginx -s reload
確認のため、ブラウザでアクセスしてみると…
無事に更新できました!\(^o^)/
まとめ
let's encrypt には色々な authenticator が用意されているので、場面にあったものを選びましょう。 証明書更新の自動化をしたい場合は、webroot など Web サーバを止める必要が無いものを選び、crontab などで更新できるように用意しておくと良いのかもしれません。 自動化した時には実行結果をメールなりアラートなりで、通知するようにしておけば、万全そうです。
図らずも、3 回も let's encrypt ネタを書いちゃったけど、カテゴリを作れば良かったかな。