Let’s EncryptでSSL証明書を自動更新する

206rc.netドメインで公開しているコンテンツについて、CloudFlareがフロントエンドでSSL接続サービスを提供していますが、バックエンド側もLet’s Encryptを用いてSSL接続が可能なように設定してあります。CloudFlareで言うところのFull SSL(Strict)になります。

毎回手動で…となると面倒くさいので(SymantecのSSL証明書等は自動更新できないので、手動でやるしかありません。自分が方法を知らないだけかもしれないけど。)、自動更新用shell scriptを作成して2ヶ月に1回実行させています。

# crontab -l
30 05 01 */2 * /root/shells/letsencrypt-update.sh

shell script(/root/shells/letsencrypt-update.sh)の中身は至ってシンプルです。ログを取得するようにしている部分がちょっと面倒なだけで(笑)

#!/bin/bash

  TODAY=`LANG=C date +%Y%m%d`
  LOG="/var/log/letsencrypt/${TODAY}.log"

  mkfifo letsencrypt-update
  trap 'rm letsencrypt-update' EXIT
  tee -a ${LOG} < letsencrypt-update &
  exec > letsencrypt-update 2>&1

  scl enable python27 "/root/letsencrypt/letsencrypt-auto renew --force-renew"

  if [ $? -eq 0 ]; then
    /sbin/service nginx restart
  fi

実行されると以下のようなログが出力されます。標準出力を/dev/nullなどに捨てるようにしていないので、同じ内容のメールが飛んできました。

Upgrading certbot-auto 0.8.1 to 0.9.3...
Replacing certbot-auto...
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for 206rc.net
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0004_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0004_csr-certbot.pem
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for ik1-301-10676.vs.sakura.ne.jp
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0005_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0005_csr-certbot.pem

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/206rc.net.conf
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/206rc.net/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/ik1-301-10676.vs.sakura.ne.jp.conf
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/ik1-301-10676.vs.sakura.ne.jp/fullchain.pem
-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/206rc.net/fullchain.pem (success)
  /etc/letsencrypt/live/ik1-301-10676.vs.sakura.ne.jp/fullchain.pem (success)
Stopping nginx: [  OK  ]
Starting nginx: [  OK  ]

SSLサーバ証明書を確認したところ、発行日が2016年11月1日、有効期限が2017年1月30日に更新されていました。最初だけ手間ですけど、それ以降は手間いらずで良いですね。