CrescPia

DNS チャレンジによる証明書の自動更新

Let’s Encrypt の証明書を 「DNS-01 チャレンジ」使って自動取得するようチャレンジしました。

証明書の更新は以前は DNS-01 チャレンジを利用していたのですが、最近は HTTP-01 チャレンジを利用してきました。


運用している VPS のセットアップを Ansible を使って自動化するようにしています。
VPS に対してインストールしたり設定したりする操作は手動では行っていなくて、Ansible を通じて行っています。
であれば、証明書の更新も自動化したくなり HTTP-01 を利用するようになりました。
なぜ、DNS-01 では自動化できないのかというと、証明書の更新処理の過程で DNS の設定行う必要があり、その設定が手動でしかできなかったからです。

ワイルドカード証明書

HTTP-01 ではなく、 DNS-01 チャレンジを使う理由としては、ワイルドカード証明書を取得できる点です。
*.example.com といった任意のサブドメインに対応した証明書が取得できます。
新しいサブドメインを設けたときに証明書を新たに用意しなくても良いのが楽でいいです。

DNS 設定の自動化

僕はドメインは XServer で取得して DNS の管理も XServer で行っています。
XServer では 2026年4月に DNS の設定変更が API でできるようになりました。
これはチャンスと API を使った証明書の自動更新の機会をうかがっていました。それから早数か月・・・。
XServer API リファレンス ‐ ドメイン管理

PR
PR

LEGO

Podcast 「#11 Let’s Encryptは無料より自動化がすごい!証明書運用の知られざる世界 | 八百万のOSS」 を聞いて刺激を受けました。
Let’s Encrypt 証明書自動取得について詳しく解説してくれています。
背中を押してもらって自動化に着手しました。


証明書取得ツールとして、Go 製の LEGO が紹介されていました。
僕は既に Certbot を利用中ではありましたが、これも変更することにします。
Lego :: ACME client and library written in Go.


利用している DNS Provider が LEGO 側で対応している場合は--dns cloudflareというようにオプションをつけるだけで DNS 書き換えの部分を実行してくれます。
DNS Providers :: ACME client and library written in Go.


残念ながら XServer は対応されていません。
そういう場合でも、--dns exec というオプションで自作のスクリプトを実行できます。
スクリプトは AI に頑張ってもらいました。
External program :: ACME client and library written in Go.

45日証明書

TLS 証明書の有効日数はこれから段階的に短くなっていくようです。
Certificate Lifetime Rationale and Plans - Let's Encrypt
Baseline Requirements for TLS Server Certificates | CA/Browser Forum


以下のような予定です。

  • 2026-03-15: 最大 200 日(すでに適用済み)
  • 2027-03-15: 最大 100 日
  • 2029-03-15: 最大 47 日

Let's Encrypt は現在 90日の有効日数で既に短いのですが、業界の方針に先立って以下の予定で対応されます。
  • 2026-05-13: デフォルトの証明書とは別にオプトインで 45日証明書の発行開始。
  • 2027-02-10: デフォルトの証明書の有効日数が 64日に短縮。
  • 2028-02-16: デフォルトの証明書の有効日数が 45日に短縮。

2026年10月現在、Let’s Encrypt では 45 日証明書も用意されています。
Profiles - Let's Encrypt
LEGO の場合は --profile tlsserver オプションで 45 日証明書が取得可能です。
45 日証明書に対応するようにしました。


有効日数が短縮されると更新頻度の調整が必要になるかもしれません。
対応をお忘れなく。(有効日数のだいたい2/3程度で更新するのが推奨のようです。)
まずは、2027年2月に 64日に短縮されます。
Decreasing Certificate Lifetimes to 45 Days - Let's Encrypt

おまけ(DNS-PERSIST-01 チャレンジ)

DNS-PERSIST-01 という新しい証明書の更新方法が導入されるようです。
新しい方法では DNS の TXT レコードを更新のたびに書き換える必要がありません。
2026年中に利用可能になるとのこと。
Decreasing Certificate Lifetimes to 45 Days - Let's Encrypt
Automated Certificate Management Environment (ACME) Challenge for Persistent DNS TXT Record Validation

PR
PR