さくらのドメインでとったドメインを certbot の dns-01 に対応させた

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" ) 。

参考文献