
2026/02/19 3:04
**DNS‑Persist‑01:DNSベースの課題検証における新モデル**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
ドラフトは、Let’s Encrypt のような証明書機関が毎回新しい DNS エントリを作成する代わりに、すべてのドメイン検証更新で単一の永続的 TXT レコードを使用できる DNS‑PERSIST‑01 という新しい ACME チャレンジタイプを導入します。
典型的なレコードは次のようになります:
_validation-persist.example.com. IN TXT ( "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/1234567890" )
このレコードが存在すると、すべての更新で再利用できるため、重要な経路から DNS の変更を除外できます。レコードは CA と ACME アカウントキーにバインドされます。初回作成後は書き込みアクセスが不要になるため、ACME アカウントキーの保護が主なセキュリティ焦点となります。
スコープ制御は検証済み FQDN にデフォルトで設定され、
policy=wildcard または persistUntil=<UTC‑seconds> パラメータを追加しない限り無期限に継続します。
はpolicy=wildcard
および検証済みドメインのすべてのサブドメインの検証を許可します。*.example.com
は明示的な有効期限を設定し、その時間前にレコードを更新する必要があります。persistUntil=
複数の CA を同時に認可するには、各 CA の発行者ドメイン名用に追加の TXT レコードを公開します。
ドラフト(SC‑088v3)は 2025 年 10 月に IETF ACME ワーキンググループで投票され、全会一致で採択されました。Pebble にすでにサポートがあり、開発中の lego‑cli クライアントもあります。ステージング展開は 2026 年第1四半期末を予定し、本番デプロイメントは 2026 年第2四半期を目標としています。
運用者にとっては更新時の DNS 変更が減少し、管理プロセスが簡素化されます。一方で、セキュリティの重点は個別の DNS レコードではなく ACME アカウントキーの保護へ移ります。
本文
Let’s Encrypt から証明書をリクエストすると、当社のサーバーは ACME チャレンジを使って、その証明書に含まれるホスト名があなた自身で管理されていることを検証します。ワイルドカード証明書が必要な利用者や、インフラを公開インターネットにさらしたくない方のために、DNS‑01 チャレンジタイプは長らく唯一の選択肢でした。DNS‑01 は広くサポートされており、実運用で試験済みですが、運用コストが伴います:DNS 伝搬遅延、更新時の継続的な DNS 更新、そして多くの場合、インフラ全体に DNS 認証情報を配布する必要がある自動化などです。
そこで、新しい IETF ドラフト仕様に基づく DNS‑PERSIST‑01 ACME チャレンジタイプのサポートを実装しています。名前からも分かるように、検証手段として DNS を利用しますが、制御を繰り返し示す代わりに、特定の ACME アカウントと CA に紐付く永続的な認可レコードを用意します。このドラフトでは、「IoT 展開、多テナントプラットフォーム、バッチ証明書操作が必要なシナリオなど、従来のチャレンジ方法が実務上不適切な環境に特に適している」と記載されています。
DNS‑01 で繰り返し制御を証明
DNS‑01 では、検証は当社側で生成したワンタイムトークンに依存します。ACME クライアントは
_acme-challenge.<YOUR_DOMAIN> にそのトークンを含む TXT レコードを公開し、当社が DNS を問い合わせて期待値と一致するか確認します。各認可ごとに新しいトークンが必要なため、DNS 更新は発行フローの一部となります。このメリットは、成功した検証ごとに現在もその名前に対して DNS が管理されていることを新たに裏付ける点です。
実際には、DNS API 認証情報が発行パイプラインのどこかに存在し、検証試行では DNS 伝搬待ちが必要になり、大規模展開では1日に数回 DNS が更新されることがあります。多くの利用者はこのトレードオフを受け入れますが、DNS 更新や機密認証情報を発行経路から除外したいと考える方もいます。
DNS‑PERSIST‑01 は検証に別のアプローチ
各発行ごとに新しいチャレンジレコードを公開する代わりに、CA とそのドメインで許可された特定 ACME アカウントを示す TXT レコードという「立ち上がった認可」を公開します。例として
example.com の場合、レコードは _validation-persist.example.com に置かれます:
_validation-persist.example.com. IN TXT ( "letsencrypt.org;" " accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/1234567890" )
このレコードが存在すれば、新規発行やその後の更新で再利用できます。運用上、DNS 更新をクリティカルパスから除外できる点が大きな利点です。
セキュリティと運用トレードオフ
DNS‑01 では DNS 書き込み権限が機密資産です。多くの展開で DNS API 認証情報は発行・更新パイプライン全体に配布され、攻撃者がそれを侵害できる場所が増えます。一方、DNS‑PERSIST‑01 では認可が ACME アカウントに直接結び付くため、初期設定後の DNS 書き込み権限はより厳格に管理できます。トレードオフとしては、認可レコードが永続化するため、ACME アカウントキーを保護することが中心課題になります。
スコープと有効期限の制御
DNS‑PERSIST‑01 は明示的なスコープ管理も導入しています。追加パラメータなしでは認可は検証済み FQDN にのみ適用され、無期限で有効です。
ワイルドカード証明書
policy=wildcard を追加すると、認可範囲が検証済み FQDN とワイルドカード証明書(例:*.example.com)および検証済み FQDN に一致するサブドメインに拡張されます:
_validation-persist.example.com. IN TXT ( "letsencrypt.org;" " accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/1234567890;" " policy=wildcard" )
任意の有効期限
認可が永続的に残ることを望まない利用者は、オプションで
persistUntil タイムスタンプを設定できます。これによりレコードの使用期間を制限でき、期限切れ前に更新または置き換えが必要になります。この機能を利用する場合は、認可が予期せず失効しないよう、適切なリマインダーや監視体制を整えてください。タイムスタンプは 1970‑01‑01 以降の UTC 秒で表します:
_validation-persist.example.com. IN TXT ( "letsencrypt.org;" " accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/1234567890;" " persistUntil=1767225600" )
複数 CA の認可
複数の CA を同時に認可するには、
_validation-persist.<YOUR_DOMAIN> に複数の TXT レコードを公開します。それぞれが認可したい発行者ドメイン名(issuer‑domain‑name)を含みます。検証時には各 CA が自分自身の issuer‑domain‑name と一致するレコードのみを評価します。
導入スケジュール
CA/ブラウザフォーラムの投票 SC-088v3(「3.2.2.4.22 DNS TXT Record with Persistent Value」)は 2025 年 10 月に全会一致で可決され、同月に IETF ACME ワーキンググループがドラフトを採択しました。ドキュメントはまだアクティブな IETF ドラフトですが、本稿で述べたコアメカニズムは大幅に変更される見込みはありません。
現在、Boulder のミニチュア版 Pebble でこのドラフト仕様のサポートが利用可能です。さらに、
lego-cli クライアント実装も進行中で、利用者が試験・導入しやすくなるようにしています。ステージング展開は 2026 年第1四半期後半を予定しており、本番環境へのローリングアウトは 2026 年第2四半期頃を目標としています。