CAAレコード(認証局承認)

メール & セキュリティ
ドメインに対して SSL/TLS 証明書を発行する権限があるのは、どの認定局かを指定する DNS レコード。
← 用語集に戻る

CAAレコードとは

CAA(Certificate Authority Authorization)レコードは、ドメインのSSL/TLS証明書を発行できる認証局(CA)を指定するDNSレコードです。認証局が侵害された場合でも、許可していない証明書の発行を防ぐセキュリティ制御として機能します。

CAAレコードが重要な理由

CAAレコードがなければ、信頼された多数の認証局のいずれもドメインの証明書を発行できます。これには次のリスクがあります。

CAAレコードは発行できるCAを制限し、攻撃対象領域を減らします。

CAAの仕組み

1. ドメイン所有者が公開: 所有者がDNSにCAAレコードを登録する

2. 証明書申請者が依頼: 申請者がCAに証明書を求める

3. CAがCAAを確認: CAがドメインのCAAレコードを調べる

4. CAが発行: 許可されている場合(またはCAAレコードが存在しない場合)だけ発行する

5. 許可がない場合: CAは申請を拒否しなければならない

CAによる必須チェック

2017年9月以降、すべてのCAは証明書を発行する前にCAAレコードを確認することが義務付けられています。これはCA/Browser ForumのBaseline Requirementsに含まれる要件です。

CAAレコードの形式

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

構成要素:

プロパティタグ

タグ目的
issueすべての証明書についてCAを許可issue "letsencrypt.org"
issuewildワイルドカード証明書についてCAを許可issuewild "digicert.com"
iodef許可されていない試行を報告iodef "mailto:[email protected]"

CAAレコードの例

単一CA(Let's Encryptのみ)

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

複数のCA

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

example.com. CAA 0 issue "digicert.com"

example.com. CAA 0 issue "sectigo.com"

ワイルドカードの制限

通常の証明書にはLet's Encrypt、ワイルドカード証明書にはDigiCertを許可します。

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

example.com. CAA 0 issuewild "digicert.com"

すべて拒否(証明書を発行しない)

証明書を発行する予定がないドメインに役立ちます。

example.com.    CAA    0 issue ";"

通知を設定する

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

example.com. CAA 0 iodef "mailto:[email protected]"

主なCA識別子

CA識別子
Let's Encryptletsencrypt.org
DigiCertdigicert.com
Sectigo (Comodo)sectigo.com
GlobalSignglobalsign.com
GoDaddygodaddy.com
Amazonamazon.com
Google Trust Servicespki.goog
これらは証明書発行を許可する認証局と、そのDNSで使う識別子の対応です。

使用する正確な識別子は、CAの公式ドキュメントで確認してください。

CAAレコードの実装

DNSプロバイダーから設定する

多くのDNSプロバイダーは、管理画面でCAAレコードを登録できます。

ゾーンファイルから設定する

; Allow Let's Encrypt and DigiCert

@ IN CAA 0 issue "letsencrypt.org"

@ IN CAA 0 issue "digicert.com"

@ IN CAA 0 iodef "mailto:[email protected]"

CAAの継承

CAAレコードはDNS階層に従います。

example.com.        CAA    0 issue "letsencrypt.org"     ; Applies to all

api.example.com. CAA 0 issue "digicert.com" ; Override for api

CAAレコードの確認

digを使う:
dig example.com CAA

; ANSWER SECTION:

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

DomScanを使う:
curl "https://domscan.net/v1/health?domain=example.com"

# Reports hasCAA in security details

CAAのベストプラクティス

1. 常にCAAを設定する: 攻撃対象領域を減らす

2. 利用するすべてのCAを含める: CDNやクラウドプロバイダーのCAも忘れない

3. iodefを設定する: 許可されていない試行の通知を受け取る

4. 強制前にテストする: 利用するCAが発行できることを確認する

5. レコードを最新に保つ: 証明書を申請する前に新しいCAを追加する

CAAでよくある問題

証明書の更新に失敗する: CAAレコードにCAがないためです。証明書の有効期限前にCAを追加してください。 CDNの証明書発行に失敗する: CDNプロバイダーのCAが許可されていません。CDNが利用するCAを確認してください。 サブドメインのCAAがない: 子ドメインは親のCAAを継承します。必要なら個別のレコードを設定してください。

CAAは、すべてのドメインで導入すべき、シンプルで強力なセキュリティ制御です。

この知識を実践する

DomScan の API を使用してドメインの可用性、状態などを確認します。