DNSのCAAレコードとHTTPS通信の仕組みを解説

DNS

近年、Webサイト運営者が気をつけなければならないセキュリティの1つに「サーバー証明書の不正発行対策」があります。
この記事では、その対策の1つである CAAリソースレコード(Certification Authority Authorization) の役割と、証明書発行後にユーザーがアクセスする際のHTTPS通信の流れまでを丁寧に解説します。

🔰 CAAレコードとは? – ドメイン所有者が使う「証明書発行の許可証」

✅ 目的:どの認証局(CA)に証明書を発行させるかをドメイン側で制限できる

CAA(Certification Authority Authorization)レコードは、DNSのリソースレコードの1つで、ドメインの所有者が「この認証局(CA)にだけ証明書の発行を許可します」と明示できる仕組みです。

example.com.  IN  CAA 0 issue "letsencrypt.org"

上記の設定では、「Let’s Encrypt 以外の認証局がこのドメインに証明書を発行することは禁止」となります。

🛠 CAAレコードの動作フロー(証明書発行時)

  1. ドメイン所有者が DNS に CAAレコードを設定。
  2. 認証局(CA)が証明書の申請を受け取る。
  3. CAが DNS を検索し、CAAレコードを確認。
    ・許可されていない場合 → 証明書発行を中止。
  4. CAAレコードに自分(CA)が許可されていれば、、CAはドメイン所有者確認(ドメイン認証など)をドメイン所有者に行う。
    ・HTTP-01, DNS-01, Email認証などの方法で、ドメインの管理権限が本当にあるかを確認。
  5. ドメイン所有者が確認を行えば、認証局はサーバー証明書を発行する。

✅ この段階で CAAレコードがチェックされるのは「証明書発行時のみ」です。

🔐 DNSSECによる保証とは?

DNSの応答を改ざんされないようにするために、DNSSEC(DNS Security Extensions)を有効にすることが推奨されています。
DNSSECを使うことで、CAが受け取ったCAAレコードが
本当にドメイン登録者が設定したものであることを検証可能
になります。これにより、攻撃者がDNSレスポンスを偽造してCAを騙すリスクを軽減できます。

🌐ユーザーがWebサイトへアクセスする際の流れ(HTTPS通信)

証明書が発行されたあと、実際にユーザーが https://example.co.jp へアクセスした場合、次のような流れになります。

🔁 1. ブラウザがサーバーへ接続(TCP+TLSハンドシェイク)

  • DNSで example.co.jp のIPアドレスを取得。
  • サーバーにアクセスすると、TLS通信が始まり、サーバー証明書が送信される

🔐 2. ブラウザが証明書の真正性を確認

この時、サーバーから送られてくる証明書には、次のような重要情報が含まれています。

🧾 サーバー証明書の主な内容:

項目説明
公開鍵暗号化通信に使用される公開鍵
発行者(Issuer)証明書を発行したCA(Let’s Encrypt)
有効期限証明書の有効期限(開始日~終了日)
CN(Common Name)ドメインの「正規の名前」。旧来はここに example.co.jpが記載されていた
SAN(Subject Alternative Name)CNと同等または複数の対象ドメイン名(example.co.jp、elb.example.co.jp など)を明示

🔎 現在では、CNよりもSANの使用が主流となっており、ブラウザはSANに記載されたドメイン名を確認します。

🧪 ブラウザ側の検証内容:

チェック内容説明
有効期限証明書が期限内かどうか
ドメイン名一致アクセス先とSAN/CNに記載されたドメインが一致しているか
発行元の信頼性CAが信頼されたルート証明書チェーンの一部かどうか
改ざんチェック署名(CAによる)を検証して整合性を確認

✅ 3. 共通鍵の交換 → HTTPS通信開始

  • 証明書の公開鍵などを使って、共通鍵を安全に交換
  • 以降はこの鍵を使って暗号化されたデータ通信(HTTPS)が行われます。

🔎 認証局(CA)はアクセス時に関与するのか?

原則として、CAは証明書発行時にしか関与しません。

  • Webブラウザは、信頼できるCAの証明書をあらかじめ内部に持っています。
  • それを使って、発行された証明書の妥当性をローカルで検証します。

※ただし、証明書が「失効」していないかを確認するために、**OCSP(Online Certificate Status Protocol)CRL(証明書失効リスト)**によって CA に問い合わせることはあります。

🎯 まとめ:CAAとHTTPSの関係

項目内容
CAAレコードの目的証明書の発行を特定の認証局(CA)に制限する
発行時の関与認証局はCAAレコードを確認してから証明書を発行
アクセス時の関与原則、CAは関与しない(証明書のローカル検証)
DNSSECの役割DNS応答の改ざんを防ぎ、CAAレコードの正当性をCAが検証可能にする
HTTPS通信との関係発行された証明書をもとに、サーバーが暗号化通信を開始できる
証明書の構成要素公開鍵、SAN、CN、発行元、署名、有効期限など

📝 おまけ:CAAレコードのおすすめ設定例

複数のCAを許可することもできます。

example.com.  IN  CAA 0 issue "letsencrypt.org"
example.com.  IN  CAA 0 issue "digicert.com"

また、ワイルドカード証明書(*.example.com)専用の設定もあります:

example.com.  IN  CAA 0 issuewild "letsencrypt.org"

DNSのCAAレコードは、見落とされがちですが非常に重要なセキュリティ対策です。
特に、企業や公共機関などで証明書の誤発行を防ぎたい場合は、積極的に導入するべきです。

HTTPS通信は「証明書を発行して終わり」ではなく、「どう発行され、どう検証されるか」を理解することでより安全なWeb運用につながります。

参考記事:DNS を用いたサーバー証明書の発行制御

コメント

タイトルとURLをコピーしました