Let's Encrypt の証明書を更新する

Posted on 2018-11-04 in zakki

Let's Encrypt の証明書更新を行います。 さっさとやらないと、とか言っといてすぐ腰が重くなる。

手動更新

試しに手動更新をしてみる。

ubuntu@localhost:~$ sudo letsencrypt renew
Processing /etc/letsencrypt/renewal/mkr-note.net.conf

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/mkr-note.net/fullchain.pem (skipped)
No renewals were attempted.

更新が必要なタイミングにならないと、コマンドは蹴られないけど更新がスキップされる。

--force-renewal オプションをつけると強制的に更新を行うのでしてみた。

ubuntu@localhost:~$ sudo letsencrypt renew --force-renewal
Processing /etc/letsencrypt/renewal/mkr-note.net.conf
new certificate deployed without reload, fullchain is /etc/letsencrypt/live/mkr-note.net/fullchain.pem

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/mkr-note.net/fullchain.pem (success)

よかった。

有効期限

https://letsencrypt.jp/blog/2015-11-09.html

有効期間は90日で60日毎の更新がオススメされている。60日は短いだろうけど世の中そんなものだからちゃんと自動化せーよってことね。

自動更新

んじゃ自動更新。cron でコマンドを叩けばいいのだけど、コンテナの中のnginx(httpサーバ)も再起動しなければならない。docker-compose で出来ることは知ってるけど、それがベストなのかっつーとよくわからない。

  • $ sudo service nginx stop
  • $ sudo letsencrypt renew
  • $ sudo service nginx start

  • $ sudo letsencrypt renew
  • $ sudo docker-compose restart <コンテナサービス名>

にして cron に入れる。/etc/cron.d/(適当ファイル名) ね。

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
COMPOSE_FILE=(docker-compose.ymlの指定)
MAILTO=(メールアドレス)

0 0 1 */2 *   root    letsencrypt renew --force-renewal; docker-compose restart proxy >> /tmp/log.log

2カ月毎の1日にcron起動するように。COMPOSE_FILEを指定すると、docker-composeがどこでも気兼ねなく打てます。

メールアドレスって書いているけど、MTA(postfix)入れてないのでメールは出ない。install するだけなのかな。メールを受け取るのが主目的ではなくて、スクリプト書いて(1人)Slack通知でもいいし、何某かの通知を得て確認したいだけ。まあ次回かなこれは。。