Let’s Encrypt でとったワイルドカードのSSL証明書を certbot の dns-01 で自動更新しようと思ったら, さくらのドメイン の付属ネームサーバーだと容易でなかったので, さくらのクラウドのネームサーバー に移行して dns-01 が自動で動くようにした,という話。
ワイルドカードのSSL証明書を Let’s Encrypt で自動更新するために,ドメイン所有の証明 (dns-01) として,DNSレコードのAPIによる自動書き換えが必要になった。
ドメイン cexen.info は昔に さくらのドメイン で取得して,ずっと付属のGUIでポチポチ設定変更していたが,これにはAPIがついていない。軽くググって, さくらのクラウドのネームサーバー に移行するのが最速と判断し,月額43円は誤差なのでさっさと移行した。
手順
APIキー取得
以下のあたりは さくらのクラウドDNS + Let’s Encrypt でワイルドカード証明書する! – Qiita が詳しい。
さくらのクラウド ホーム にログインした。いくつかの規約に同意し,適当な名称 ( cexen-info
) でクラウドアカウントを作成した。続けて さくらのクラウド ホーム で APIキー > (該当するアカウント) > 追加
と辿って,APIキーを作成した。
- 種類:
リソース操作APIキー
- 名前:適当(例:
certbot
) - アクセスレベル:
設定編集
得られたアクセストークンとアクセストークンシークレットを,certbotを走らせるサーバー上に安全に保存した。
vim ~/.sakura
dns_sakuracloud_api_token = "hogehoge"
dns_sakuracloud_api_secret = "fugafuga"
chmod 0600 ~/.sakura
ネームサーバー移行
以下のあたりは DNS-01方式によるLet’s Encrypt自動更新 – ぱろっくの日記 が詳しい。
DNS設定ページ にて DNSゾーン一覧 > 追加
と飛んでゾーン名を埋め ( cexen.info
) ,ゾーンを作成した。続けて作成したゾーンを選択して 詳細 > リソースレコード
と飛び, 元々の設定 と同一になるように真心こめて手動でレコードを作成し,反映した。
作成したゾーンの 詳細 > 情報 > DNSサーバ
を確認して, 元々の設定 のほうでネームサーバーをそれらに変更した。
certbotの設定更新
以下のあたりは さくらのクラウドDNS + Let’s Encrypt でワイルドカード証明書する! – Qiita が詳しい。
dns-01でさくらのクラウドのAPIを叩いてくれるプラグインをインストールした。証明書を取り直すことで動作確認と設定更新を行った。
sudo yum install certbot-dns-sakuracloud
sudo certbot renew --force-renewal --dns-sakuracloud --dns-sakuracloud-credentials ~/.sakura
sudo systemctl restart nginx
sudo systemctl restart postfix
なお出力は以下のような感じ。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/cexen.info.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Plugins selected: Authenticator dns-sakuracloud, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for cexen.info
dns-01 challenge for cexen.info
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Waiting 90 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
Starting new HTTPS connection (1): secure.sakura.ad.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/cexen.info/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/cexen.info/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
なおrenewの定期実行は sudo crontab -e
で設定済み ( 50 05 * * 0 /usr/bin/certbot renew --post-hook "systemctl restart nginx ; systemctl restart postfix"
) 。