`certbot renew`でワイルドカード証明書の更新

サーバー移転して改めてワイルドカード証明書を更新しようと思ったら、やり方をすっかり忘れてしまっていたので、書き留めておく。直接的なやり方の情報が意外と手に入らなかったし。

`certbot renew`だけだと足りない

まず、ワイルドカード証明書の場合、

certbot renew
だけだと、基本的にきちんと更新されない。使ってる環境に都合のいい何らかのプラグインを用いるか、初回の登録時と似たような手段を用いるかの大きく二択になるだろう。

基本的な流れ

ワイルドカード証明書は更新する際に、初回登録と同様にDNSによる認証が要求される。そのため、コマンドで更新を要求→更新用の認証キーを取得→DNSで “_acme-challenge.{目的のドメイン}” のTXTレコードにそのキーを登録→ワイルドカード証明書の取得 という流れになる。では、`renew` の際にはそれをどう行うか。

`certbot renew` への追加オプション

公式ドキュメントの中にDNSごとのプラグインの一覧がある。対応したDNSを用いている場合は、各サービスへの認証情報とそれぞれのプラグインをコマンドで指定することで比較的簡単に実行できる。恐らく上記の流れを各サービスのAPIを叩いて自動的に実行するようなものなのだろう。対応してなかったから触ってはいないが。

残念ながら対応するプラグインはなかったので、初回登録時に近い手段を用いた。この方法の場合は一応万能な手段ではある。コマンドとしては、

certbot renew --server https://acme-v02.api.letsencrypt.org/directory \
--preferred-challenges=dns \
--manual --manual-auth-hook /path/to/shell.sh
といった感じになる。’ –manual-auth-hook ‘ に指定するシェルには、”CERTBOT_VALIDATION” という変数としてDNS認証用のトークンが渡されるので、それを何らかの確認用ファイルに出力し、待機させる。その間にトークンをDNSにセットすればワイルドカード証明書の更新が完了する。略式なシェルの例としては
#!/bin/bash 
echo "$CERTBOT_VALIDATION" > /any/path/validation_token  #トークンを任意のファイルに出力
sleep 300  # 5分待機。この間にファイルに出力したトークンをDNSに手動でセット。
といったもので一応機能する。完全な自動更新を目指すなら、Selenium等のブラウザ操作の自動化ツールを用いてDNSサーバの設定の変更を組むとAPIでの設定変更ができない場合でもどうにかできるはずだ。3か月に1度の処理のためにそこまでする価値があるかは別問題だが。

とりあえず、これでLet’s Encryptによるワイルドカード証明書の更新ができた。きちんと自動化させたい気もするが、一つあれば使いまわせる点も考えると年に4回だけ手を動かす運用でも趣味の範囲で使うものなら十分かもしれない。

コメントを残す