🔒

DNS-PERSIST-01はどう動くのか?

Let's Encryptの持続的DNS認証レコードで繰り返し検証を排除

従来のDNS-01チャレンジは証明書を発行または更新するたびに_acme-challenge. TXTレコードを新規作成する必要がありました。そのためDNS API資格情報をACMEクライアントに提供する必要があり、DNS伝播遅延も問題でした。DNS-PERSIST-01は_validation-persist.example.com TXTレコードにCAのURIとACMEアカウントURIを一度だけ設定すれば、以降の証明書発行/更新時にCAがこのレコードを確認してドメイン所有権を認証します。DNS変更が発行経路から完全に除去され、DNS API資格情報の露出なしで自動更新が可能になります。

構造ダイアグラム

従来のDNS-01方式(毎回繰り返し)
🖥️
ACME Client
トークン要求
🏛️
Let's Encrypt
TXT検証
🌐
DNS Server
_acme-challenge.
毎回変更が必要!
VS
DNS-PERSIST-01方式(一度設定、再利用し続ける)
🖥️
ACME Client
certbot等
発行リクエスト DNS変更なし!
🏛️
Let's Encrypt CA
アカウントURI照合
TXT照会
🌐
DNS Server
_validation-persist.
一度設定でOK
核心: <strong>_validation-persist.</strong> TXTレコードにCA+アカウントURIを一度だけ設定すれば、<br>以降の発行/更新時に<strong>DNS API呼び出し不要</strong>で認証完了
# TXTレコード例
_validation-persist.example.com. TXT
  "acme-challenge=persist;
   ca=https://acme-v02.api.letsencrypt.org/directory;
   account=https://acme-v02.api.letsencrypt.org/acct/12345;
   policy=wildcard;
   persistUntil=2027-01-01T00:00:00Z"
主要オプション説明
ca 許可するCAのACME directory URL(複数CA同時許可可能)
account 証明書発行を許可するACMEアカウントURI
policy wildcard: サブドメイン含む、exact: 該当ドメインのみ
persistUntil この認証レコードの有効期限(期限後再設定が必要)

動作フロー

1

既存DNS-01: 発行リクエスト → CAがランダムトークン発行 → _acme-challenge. TXTレコード生成 → DNS伝播待機 → 検証

2

_validation-persist.example.com TXTレコードにCA URI + ACMEアカウントURIを設定(一度だけ)

3

ACMEクライアントがLet's Encryptに証明書発行をリクエスト

4

Let's Encryptが_validation-persist. TXTレコードを照会 → アカウント一致を確認

5

ドメイン所有権認証完了 → 証明書発行(DNS変更なし)

6

更新時も同一レコードを再利用 → DNS API呼び出し不要

メリット

  • 証明書発行/更新時にDNS変更不要
  • DNS API資格情報露出リスクの軽減
  • ワイルドカード証明書にも適用可能
  • persistUntilで認証有効期限を制御
  • 複数のCAを同時に許可可能

デメリット

  • ACMEアカウントキーの保護がより重要に(キー漏洩 = 不正発行の可能性)
  • 2026年Q2以降にLet's Encryptサポート予定(まだ待機中)
  • DNSSECが必須でないためDNSスプーフィングリスクが存在
  • 持続的認証のためキー漏洩時に即座にレコード削除が必要

ユースケース

IoTデバイスの大量証明書配布 マルチテナントSaaSプラットフォーム(顧客ドメイン証明書) 大量証明書の自動発行/更新 LAN内部サーバー証明書(DNS APIアクセス不可環境) ホームラボ/セルフホスティング自動化