🌐

【Auth0】証明書付きドメインをVerifyできない

2023/03/10に公開

え?カスタムドメインVerifyできない・・・?でもDNSからドメイン情報は返ってくる・・・調べてもわからない・・・そして返ってきたAuth0サポートの回答とは一体・・・。

はじめに

はじめまして。miyassieです。
この記事はタイトルと同じ問題で絶賛お困り中の方へ向けたものです。
まず、Auth0では認証ページに独自ドメインを用いることができます。
この機能をカスタムドメインと呼びます。
活用例として、Webアプリケーションのログイン画面のURLを以下のようにカスタムできます。
デフォルト: YOUR_DOMAIN.auth0.com

カスタムドメイン: login.YOUR_DOMAIN.com

何が起きたのか

問題

まずカスタムドメインを利用するためには、以下の大まかな手順を実施します。

  1. Auth0側でドメイン名を定め、CNAMEを発行する。
  2. DNS側(Route53など)でCNAMEを登録する。
  3. Auth0側でドメインをVerifyする。

簡単ですね。なぜか手順3で問題が発生します。
「 V e r i f y で き な い ・ ・ ! ! 」

問題のキャプチャー


手順3のエラー

当然アクセスできない

仮説

仮説を2つ考えました。が、どちらもハズレ。

DNSレコードの反映時差

→ 数日経過後にリトライするも結果変わらず

Route53で登録する際に何か間違えた

→ nslookup YOUR_DOMAIN で正常なドメイン情報レスポンスを確認

結論

Auth0サポートからこのような回答がありました。
「CNAME発行からカスタムドメインのVerifyまでを1週間以内に実施しないと失敗する可能性があります。詳しくはこちら。」

Domain control validation(DCV)は、Certificate Authority(CA)がドメインの証明書を発行する前に行わなければなりません。
DCVが失敗した場合、Cloudflareはスケジュールに従って自動的に再試行します。
DCVはスケジュール(Let's Encryptは7日間)に従ってCloudflareのCAパートナーとの間で行われます。その後、DCVトークンは信頼されるSSL証明書の発行を規定するCA/Bベースライン要件に従って失効されます。

と、カスタムドメインを設定するときは1週間以内に全部終わらせましょう。というお話でした。
ドキュメントかダッシュボードに注釈でも入れてくれたらいいのに・・
ちなみにEventBridgeストリームも期限内(7日程度)にAWS側の受け入れ設定をしないと、
Event Source Nameが自動取り消しされるということもあったのでお気をつけください。

次の章ではここで登場したDCVやCA、なぜ1週間なのか、そもそもCNAMEとは?をもう少し深掘りしようと思います。

Domain control validation (DCV) とは

まず初めに、CNAMEとはDNS(IPアドレスとドメインを関連付けて管理するシステム)におけるリソースレコードの一種です。CNAMEレコードは、あるドメイン名を別のドメイン名に関連付けるために使用されます。
つまり、ドメインAをドメインBに紐づけた状態であれば、ドメインAにアクセスするとドメインBにリダイレクトすることが可能になります。
次にDCVとは、SSL証明書を発行する前にCAが「証明書発行リクエスト者がリクエストに関連するドメインを使用する権限を持っているか」を確認する手続きのことです。(CAはデジタル証明書を発行する信頼できる組織・認証局のこと)
DCVには複数の方式があり、その1つにCNAMEレコードやTXTレコードを用いたドメイン認証方式が存在します。
そして、Auth0 (Cloudflare) ではDCVを実施するCAパートナーとしてLet's Encryptを選択しています。

またTXTレコードの有効期限に関して、Let's EncryptによるDCVではトークンとなるTXTレコードの有効期限が7日間に設定されています。
このTXTレコードの有効期限こそが、今回の事象の原因であることがようやくわかりましたね。

まとめ

  • Auth0のカスタムドメインを利用する場合は、CNAMEの設定後7日以内にドメインの検証を完了しよう
  • ドメインの所有権を確認するための手続きをDomain Control Validation(DCV)と呼び、Auth0ではLet's Encryptがその手続きを実施する
  • Let's EncryptのDCVにおいて、TXTレコードの有効期限は7日間となっており、発生した問題の根底にいる原因

参考

https://community.letsencrypt.org/t/token-has-an-expiration-date/19022

https://auth0.com/docs/customize/custom-domains

https://developers.cloudflare.com/ssl/reference/validation-backoff-schedule/

GitHubで編集を提案

Discussion