🔥

cloudflareでDNS-challengeを使ってSSL証明書を更新する方法

に公開

2025/04/25現在の話になります。

前書き要約

DNSサーバーをcloudflareなどAPIを使ってTXTレコードを変更できるサーバーに移行して、let's encryptのSSL証明書の更新を出来るようにする。

前書き

今まで自宅鯖でhttpチャレンジを使ったSSL証明書を使っていたのですが、あるときcertbotが予期していなかったタイミングで勝手に実行されたように見えたので、ちょっと怖くなり(でも自分で動かしてたかも知れないけど…)サーバの場所を変えてDNSチャレンジに変更しました。ワイルドカード証明書を使いたかったのもあります。

ドメインレジストラはvalue domainを使っています。

サーバーはubuntu24.01 LTSを使っています。

初期設定を書いてDNS-01 challengeを実行して一息ついたところで3ヶ月ほどたったある日、更新時期だよーまだ更新されてないよーというメールが来ました。

httpチャレンジの時はうまく更新出来ていたのですが、DNSチャレンジでの更新は初めてだったので、なんでうまくいかないのか探していたら、2回目以降もドメインの持ち主か確認するためにDNSのTXTレコードを変更しないといけないことがわかりました。

そして自動更新したいならば、DNSのレコードをAPIを使って自動設定できるDNSサーバーを使わないといけないこともわかりました。

ところが、value domainはそのAPIが提供されていないようでした。

サーバーを変更したときに、DDoSなどから守るためにcloudflare DNSを使っていたのですが、何かがうまくいかなかったのでDNSはスルーしてた(proxyを使わない設定にしてた)のですが、そこを使えばうまく出来そうだということがわかったので、cloudflareを使うことを前提にlet's encryptの証明書の更新を出来るようにしてみたいと思いました。

APIを使うためのトークンを取得

参考: CloudflareのDNSを使ってCertbotで証明書を発行する

トークンの保存

credentialsファイルは、多くのサイトで

dns_cloudflare_email = "mail@example.com"
dns_cloudflare_api_token = "APItoken"

と書かれていることが多いのですが、私の場合は、

dns_cloudflare_email and dns_cloudflare_api_key are not needed when using an API Token

というエラーが出てきたので、emailを消して動かしました。

# echo dns_cloudflare_api_token = "token" > /root/.secret/cloudflare.ini

スクリプトの準備

私はsnapを使ってないのですが、snapからインストールしてる記事が多かったのでaptからインストール出来るものを探してみました

https://qiita.com/ooxif/items/99ad3c93d4d6862d45f0

# apt search cert-bot
# apt install python3-certbot-dns-cloudflare

cert_cloudflare.sh を/root/binディレクトリに置きます。

#!/bin/sh
/usr/bin/certbot -v certonly \
        --dns-cloudflare \
        --dns-cloudflare-credentials /root/.secret/cloudflare.ini \
        --dns-cloudflare-propagation-seconds 10 \
        -d *.example.com \
        -d example.com

/usr/sbin/service nginx reload

ファイルの編集が終わったら、下記を実行しておきます。

#chmod 500 /root/bin/cert_cloudflare.sh
#chmod 600 /root/.secret/cloudflare.ini

実行

上記で書いた、cert_cloudflare.shを実行します

#/rot/bin/cert_cloudflare.sh

おまけ

もしかしたら、cloudflareを使うと安全に自宅サーバーを作れるかもしれない…という記事を見つけたので、そのリンクも置いておきます。
https://zenn.dev/matsubokkuri/articles/cloudflare-service

Discussion