Let's Encryptの証明書を自動更新するようにする

Let’s Encryptの証明書を使ってSQLServer Linuxへの接続の暗号化をしてみるのSSL証明書を自動更新するようにした

Let’s Encryptは使い勝手がよいのですが、証明書の有効期限が90日なので忘れないように更新するようにしないといけません
しかし更新を手でやることにすると、必ず忘れる(もしくはポカをやらかす)ので自動更新するようにしておく

設定メモ

証明書をコピーするスクリプトを書く

$ nano SQLServer_UpdateSSLCert.sh
#! /bin/bash

# SQLServerを停止する
systemctl stop mssql-server
sleep 1m

# SSL証明書をコピーする
cp /etc/letsencrypt/live/sqldb.example.com/cert.pem /var/opt/mssql/ssl
cp /etc/letsencrypt/live/sqldb.example.com/privkey.pem /var/opt/mssql/ssl
chown mssql:mssql /var/opt/mssql/ssl/*
chmod 600 /var/opt/mssql/ssl/*

# SQLServerを起動する
systemctl start mssql-server

$ chmod +x SQLServer_UpdateSSLCert.sh

certbot-autoをcronで実行する

certbot-autoコマンドには--renew-hookオプションで、証明書が更新された後に実行させたいことが書いておける賢い機能があるのでそれを活用します

$ sudo crontab -u root -e
30 4 1 * * /opt/certbot/certbot-auto renew --keep-until-expiring --standalone --preferred-challenges http-01 --renew-hook "/[Path]/SQLServer_UpdateSSLCert.sh"

certbot-autoコマンドには

  • --post-hookオプション
  • --renew-hookオプション

があるようですが、今回のケースでは

  • --renew-hookオプション:証明書が更新された時に実行する

がベターな感じです
たとえばnginxを止めてからcertbot-autoコマンドを実行、実行した後にnginxを動かすような場合は

  • –pre-hook “service nginx stop” –post-hook “service nginx start”

のように--pre-hookオプションと--post-hookオプションを組み合わせてつかうと良さそうです