CAAレコード -- 認証局の認可
CAA DNSレコードを使用して、ドメインのSSL/TLS証明書を発行できる認証局を制限する方法を解説します。不正な証明書発行を防止しましょう。
CAASecurity
Zone File Entry
example.com. IN CAA 0 issue "letsencrypt.org" example.com. IN CAA 0 issuewild "letsencrypt.org" example.com. IN CAA 0 iodef "mailto:security@example.com"
詳細な説明
CAAレコードとは?
CAAレコード(Certificate Authority Authorization)は、ドメインのSSL/TLS証明書を発行することが許可される認証局(CA)を指定します。2017年以降(CA/Browser Forum Ballot 187に基づき)、すべてのCAは証明書を発行する前にCAAレコードを確認することが義務付けられています。
BINDゾーンファイルの構文
; Let's Encryptのみに証明書発行を許可
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
; Let's Encryptに通常の証明書を許可、ワイルドカードはすべて拒否
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
example.com. 3600 IN CAA 0 issuewild ";"
; 複数のCAを許可
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
example.com. 3600 IN CAA 0 issue "digicert.com"
example.com. 3600 IN CAA 0 issue "sectigo.com"
; 違反の報告
example.com. 3600 IN CAA 0 iodef "mailto:security@example.com"
CAAタグ
| タグ | 説明 |
|---|---|
issue |
非ワイルドカード証明書の発行をCAに認可 |
issuewild |
ワイルドカード証明書の発行をCAに認可 |
iodef |
ポリシー違反をこの連絡先に報告(メールまたはURL) |
CAAチェックの仕組み
CAがwww.example.comの証明書リクエストを受け取った場合:
- CAが
www.example.comのCAAレコードを問い合わせ - 存在しない場合、
example.comを確認 - 存在しない場合、
com.(親ゾーン)を確認 - どのレベルにもCAAレコードが見つからなければ、CAは発行を許可される
- CAAレコードが存在し、そのCAがリストにない場合、発行は拒否される
つまり、CAAレコードを1つでも追加すると、リストされたCAのみに発行が即座に制限されます。
フラグフィールド
タグの前の数値(通常0)はフラグフィールドです:
- 0:非クリティカル -- CAがタグを理解できない場合、処理を続行できる
- 128:クリティカル -- CAがタグを理解できない場合、発行を拒否しなければならない
実際には、すべてのCAがissue、issuewild、iodefを理解するため、標準タグには常に0を使用してください。
ワイルドカード証明書の制御
issuewildタグは、ワイルドカード証明書(*.example.com)を特に制御します。issueレコードのみ存在する場合、通常証明書とワイルドカード証明書の両方に適用されます。issuewildレコードが存在する場合、ワイルドカードリクエストに対してのみissueを上書きします。
すべてのワイルドカード証明書をブロックするには:
example.com. IN CAA 0 issuewild ";"
セキュリティ上のメリット
- 誤発行の防止:未認可のCAがドメインの証明書を発行することを阻止
- インシデント通知:
iodefタグにより、CAがポリシーに基づいてリクエストを拒否した際にアラートを受信 - 多層防御:Certificate Transparencyのログ記録やHSTSプリロードを補完
- サブドメイン保護:CAAレコードはオーバーライドされない限りサブドメインに継承される
ユースケース
CAAレコードを追加して、ドメインのSSL/TLS証明書を発行できる認証局を制限し、不正な証明書発行のリスクを軽減します。