ホスティングプロバイダまたはCDNで働いている場合、ACMEのDNS-01検証メソッドを使用すると、別のプロバイダに既存のHTTPS Webサイトを持っている新規顧客のオンボーディングがはるかに容易になります。新規顧客がドメイン名をサーバーにポイントする前に、証明書を既にインストールしておく必要があります。そうしないと、証明書の発行とインストール中に、顧客のサイトへの訪問者は数分間停止が発生します。これを修正するには、新規顧客と協力して、顧客がサイトのDNSを切り替える前に、DNS-01検証メソッドを使用して証明書を発行する必要があります。

DNS検証メソッドの仕組み

DNS-01検証メソッドはこのように機能します:`www.example.com`を制御していることを証明するために、`_acme-challenge.www.example.com`にACMEで指定された「ダイジェスト値」を持つTXTレコードを作成します(ACMEクライアントはこのダイジェスト値の作成を処理する必要があります)。TXTレコードの準備ができたら、ACMEクライアントはACMEサーバー(たとえば、Let's Encrypt)にドメインが検証の準備ができていることを通知します。ACMEサーバーはTXTレコードを検索し、予想されるダイジェスト値と比較し、結果が正しい場合は、アカウントが`www.example.com`の発行を承認されているとみなします。新しい顧客は、通常のWebサイトの運用を妨げることなく、このTXTレコード(またはCNAME)を設定できます。

CNAMEの利点

ホスティングプロバイダとCDNに推奨する追加の秘訣があります。ダイジェスト値を新規顧客に渡してTXTレコードを作成するように指示する代わりに、`_acme-challenge.www.example.com`から、制御するドメイン名にCNAMEを設定するように顧客に指示します。検証されるドメインに固有のものです。たとえば、`www.example.com.validationserver.example.net`を使用する場合があります。次に、ソフトウェアがこのCNAMEが設定されていることを確認したら(伝播遅延とエニーキャストを考慮して)、ACMEクライアントは`www.example.com`の検証プロセスを開始し、`www.example.com.validationserver.example.net`にTXTレコードをプロビジョニングする必要があります。ACMEサーバーのTXTルックアップはCNAMEに従うため(すべてのDNSルックアップと同様に)、プロビジョニングした値が表示され、アカウントが承認されているとみなされます。

このアプローチは、顧客に生のダイジェスト値を渡すよりもいくつかの理由で優れています。まず、顧客はCNAMEを設定するために必要なすべての時間を確保できます。保留中の承認を事前に作成し、顧客にデプロイするダイジェスト値を提供する場合、有効期限が切れるまでの固定の有効期間があります(Let's Encryptの場合、この有効期間は7日間です)。顧客がその時間内にプロセスを完了しない場合は、新しい保留中の承認を作成し、顧客に新しいダイジェスト値を提供する必要があります。これは、あなたと顧客の両方にとって面倒で時間がかかります。CNAMEメソッドを使用すると、新しい顧客がDNSに必要な変更を行うのに1か月かかっても、変更が完了次第、すぐに稼働させることができます。

新規顧客にTXTレコードを直接プロビジョニングさせるよりもCNAMEメソッドを好むもう1つの理由は、ACMEアカウントキーを定期的にローテーションするというベストプラクティスをサポートするためです。DNS-01検証に使用されるダイジェスト値は、現在のACMEアカウントキーに基づいて計算されるため、アカウントキーをローテーションするたびに値が変更されます。顧客にTXTレコードを手動でプロビジョニングするように依頼した場合、DNSに配置するように依頼した値が有効ではなくなり、別の値を使用する必要があることを潜在的な新規顧客に通知する必要があります。これは非常に不便です!代わりにCNAMEメソッドを使用する場合、新しい顧客がDNSに配置する必要があるACME関連の値は1つだけであり、アカウントキーを変更しても変更されません。

未使用のCNAMEのクリーンアップ

最後に、これは顧客をオンボーディングするための優れた方法ですが、顧客が自身をオフボーディングしたときを検出する必要もあります。計画が変更されたことを通知せずに、Aレコードを変更して別のCDNを指すようにするだけです。この状況を監視し、証明書の発行を試みるのを停止する必要があります。顧客があなたを指すCNAME `_acme-challenge`サブドメインを残している場合は、その顧客に連絡して削除するように促す必要があります。CNAMEサブドメインは、証明書を発行するための委任された承認を表しており、その委任をクリーンアップすることで、顧客のセキュリティ体制と自身のセキュリティ体制の両方が向上します。同様に、顧客がCNAMEを設定し、顧客に代わって証明書を発行したが、顧客がAレコードをサーバーにポイントしたことがない場合は、顧客からのさらなる介入なしに無期限に新しい証明書を再発行しないでください。