CAAレコードとは?SSL証明書の不正発行を防ぐDNS設定をわかりやすく解説
CAAレコードの基本的な意味から、仕組み、書き方、設定例、確認方法、注意点までを、初心者の方にもわかりやすく解説
目次
- CAAレコードとは
- なぜCAAレコードが必要なのか
- CAAレコードの仕組み
- CAAレコードの探し方(上位ドメインへの遡り)
- CAAレコードの構成要素
- 主なタグの種類
- CAAレコードの設定例
- 複数の認証局を許可する場合
- ワイルドカード証明書を禁止する場合
- すべての証明書発行を禁止する場合
- 報告先を指定する場合
- 代表的な認証局の識別名
- CAAレコードを設定するときの注意点
- 使っているサービスの認証局を必ず許可する
- 証明書の更新時にも確認される
- DNSサービスがCAAレコードに対応しているか確認する
- CAAレコードだけで完全に守れるわけではない
- CAAレコードの確認方法
- コマンドで確認する
- ドメインチェッカーなどのWebツールで確認する
- よくあるトラブルと対処法
- 証明書が発行できない、更新に失敗する
- 設定したのに変更が反映されない
- DNSの問い合わせ自体に失敗する
- よくある質問
- CAAレコードは必ず設定しないといけませんか?
- CAAレコードを設定すると、サイトの表示や検索順位に影響しますか?
- すでに発行済みの証明書は、CAAレコードの設定で無効になりますか?
- 設定を間違えたらどうなりますか?
- まとめ
DNSレコードといえば、AレコードやCNAMEレコード、MXレコードが有名ですが、「CAAレコード」という名前は、あまり馴染みがないという方も多いのではないでしょうか。
CAAレコードは、SSL/TLS証明書の発行に関わる、セキュリティ向けのDNSレコードです。設定しなくてもサイトは表示されるため、存在に気づかないまま運用している方も少なくありません。しかし、正しく設定しておくと、自分のドメインに対する証明書の不正発行のリスクを減らせます。一方で、設定を誤ると、証明書が発行できなくなるトラブルの原因にもなります。
この記事では、CAAレコードの基本的な意味から、仕組み、書き方、設定例、確認方法、注意点までを、初心者の方にもわかりやすく解説します。
CAAレコードとは
CAAレコード(Certification Authority Authorization Record)とは、そのドメインに対して、SSL/TLS証明書を発行してよい認証局(CA)を指定するDNSレコードです。日本語では「認証局認可レコード」と呼ばれることもあります。
ウェブサイトのURLが「https://」で始まり、ブラウザに鍵マークが表示されているサイトでは、SSL/TLS証明書が使われています。この証明書は、認証局(CA:Certification Authority)と呼ばれる機関が発行しています。Let’s EncryptやDigiCert、Sectigo、GlobalSignなどが代表的な認証局です。
CAAレコードを設定しておくと、「このドメインの証明書は、ここに指定した認証局だけが発行できます」と、DNSを通じて世の中に宣言できます。逆に言えば、CAAレコードで許可されていない認証局は、そのドメインの証明書を発行してはいけないルールになっているのです。
建物にたとえると、証明書の発行は「合鍵の作成」のようなものです。CAAレコードは、「合鍵を作ってよい業者は、この会社だけ」と、事前に管理会社へ届け出ておくイメージです。
なぜCAAレコードが必要なのか
SSL/TLS証明書は、通信の暗号化と、サイトが本物であることの証明という、2つの重要な役割を持っています。もし悪意のある第三者が、他人のドメインの証明書を不正に発行できてしまうと、偽サイトを本物そっくりに見せかけたり、通信を盗み見たりできてしまう可能性があります。
認証局は、証明書を発行する前に、申請者がそのドメインの管理者であるかを確認する義務があります。しかし、過去には認証局の確認が不十分だったり、認証局そのものが侵害されたりして、不正な証明書が発行された事例が世界的に報告されてきました。
こうした事態に備え、ドメインの所有者側から「発行してよい認証局」を指定できる仕組みとして作られたのが、CAAレコードです。現在では、主要なブラウザや証明書に関する業界団体のルールにより、認証局は証明書を発行する前に、対象ドメインのCAAレコードを確認することが義務づけられています。
CAAレコードの仕組み
CAAレコードがどのように使われるのか、証明書の発行の流れで見てみましょう。
- ドメインの管理者が、認証局に対して、証明書の発行を申請する
- 認証局が、対象ドメインのDNSに問い合わせ、CAAレコードが設定されているかを確認する
- CAAレコードが設定されている場合、自社がその許可リストに含まれているかを確認する
- 許可されていれば、ドメインの所有確認などの手続きを経て、証明書を発行する。許可されていなければ、発行を拒否する
- CAAレコードが設定されていない場合は、どの認証局でも発行できる(通常の手続きが行われる)
なお、CAAレコードが確認されるのは、あくまで「証明書を新しく発行するとき」です。すでに発行済みの証明書が、CAAレコードの設定によって無効になることはありません。また、ブラウザがサイトを表示するときに、CAAレコードを確認することもありません。
CAAレコードの探し方(上位ドメインへの遡り)
このため、多くの場合は、ドメイン直下(@)にCAAレコードを1つ設定しておけば、配下のサブドメイン(www、blogなど)にも同じルールが適用されます。特定のサブドメインだけ別の認証局を使いたい場合は、そのサブドメインに個別のCAAレコードを設定することで、上書きできます。
CAAレコードの構成要素
CAAレコードは、次の3つの要素を持ちます。
| 要素 | 内容 | 例 |
|---|---|---|
| フラグ(flags) | 認識できないタグの扱いを指定する。通常は0 | 0 |
| タグ(tag) | 何についての指定かを示す | issue、issuewild、iodef |
| 値(value) | 認証局のドメイン名やメールアドレスなど | letsencrypt.org |
主なタグの種類
| タグ | 役割 |
|---|---|
issue | 通常の証明書(ワイルドカード以外)を発行してよい認証局を指定する |
issuewild | ワイルドカード証明書(*.example.com)を発行してよい認証局を指定する |
iodef | 不正な発行要求などがあったときの、報告先(メールアドレスやURL)を指定する |
issuewildを設定しない場合、ワイルドカード証明書についても、issueの指定が適用されます。ワイルドカード証明書だけを別扱いにしたいときに、issuewildを使います。
CAAレコードの設定例
ドメイン「example.com」の証明書を、Let’s Encryptだけに許可したい場合、次のように設定します。
| ホスト名 | タイプ | フラグ | タグ | 値 |
|---|---|---|---|---|
@ | CAA | 0 | issue | letsencrypt.org |
ゾーンファイル形式で書くと、次のようになります。
example.com. IN CAA 0 issue "letsencrypt.org"
複数の認証局を許可する場合
複数の認証局を使いたい場合は、それぞれのCAAレコードを別々に追加します。
example.com. IN CAA 0 issue "letsencrypt.org"
example.com. IN CAA 0 issue "digicert.com"
ワイルドカード証明書を禁止する場合
通常の証明書は許可しつつ、ワイルドカード証明書の発行を誰にも許可しない場合は、issuewildの値に「;」(セミコロン)を指定します。
example.com. IN CAA 0 issue "letsencrypt.org"
example.com. IN CAA 0 issuewild ";"
すべての証明書発行を禁止する場合
証明書をまったく使わないドメインで、どの認証局にも発行を許可しないなら、issueの値に「;」を指定します。
example.com. IN CAA 0 issue ";"
報告先を指定する場合
不正な発行要求があった場合の通知先を指定するなら、iodefを使います。
example.com. IN CAA 0 iodef "mailto:[email protected]"
ただし、iodefによる報告への対応は、認証局によって異なります。設定しても、必ず通知が届くとは限らない点に注意してください。
代表的な認証局の識別名
issueタグの値には、認証局ごとに決められた識別名(ドメイン名)を指定します。代表的な例は次のとおりです。
| 認証局 | 識別名の例 |
|---|---|
| Let’s Encrypt | letsencrypt.org |
| DigiCert | digicert.com |
| Sectigo | sectigo.com |
| Google Trust Services | pki.goog |
| GlobalSign | globalsign.com |
識別名は、認証局が公式に案内している値を、正確に入力する必要があります。設定前に、利用する認証局やサービスのドキュメントで、最新の値を確認してください。
CAAレコードを設定するときの注意点
使っているサービスの認証局を必ず許可する
最も多いトラブルが、実際に使っている認証局を許可し忘れることです。たとえば、レンタルサーバーの無料SSL機能や、CDN、クラウドサービスのマネージド証明書を使っている場合、そのサービスが裏側で使っている認証局を、CAAレコードで許可しておかなければなりません。
複数の認証局を使い分けているサービスもあるため、CAAレコードを設定する前に、利用中のサービスがどの認証局で証明書を発行しているのかを確認しましょう。
証明書の更新時にも確認される
CAAレコードは、新規発行だけでなく、証明書を更新(再発行)するときにも確認されます。Let’s Encryptのように、一定期間ごとに自動更新される証明書では、後からCAAレコードを設定して、その認証局を許可し忘れると、次回の更新で失敗する可能性があります。
DNSサービスがCAAレコードに対応しているか確認する
一部の古いDNSサービスやレンタルサーバーの管理画面では、CAAレコードの登録に対応していないことがあります。その場合は、対応しているDNSサービスへの移行を検討する必要があります。
CAAレコードだけで完全に守れるわけではない
CAAレコードは、あくまで「認証局が証明書を発行する際のチェック」に使われるものです。許可した認証局が侵害された場合や、DNSの設定自体を攻撃者に書き換えられた場合は、防ぐことができません。DNSの管理画面へのログインには、二段階認証を設定するなど、基本的なセキュリティ対策もあわせて行いましょう。
CAAレコードの確認方法
コマンドで確認する
Mac・Linuxではdigコマンド、Windowsではnslookupコマンドを使います。
dig example.com CAA +short
nslookup -type=CAA example.com
設定されていれば、次のような結果が表示されます。
0 issue "letsencrypt.org"
何も表示されない場合は、CAAレコードが設定されていない(または、上位ドメインにも設定がない)ということです。
ドメインチェッカーなどのWebツールで確認する
ブラウザ上でドメイン名を入力するだけで、CAAレコードの有無や内容を確認できるWebツールもあります。コマンド操作が不要なため、初心者の方でも手軽に、現在の設定を把握できます。
よくあるトラブルと対処法
証明書が発行できない、更新に失敗する
「CAAレコードにより発行が禁止されている」といった趣旨のエラーが表示される場合は、CAAレコードの設定が原因の可能性が高いです。次の点を確認しましょう。
- 使おうとしている認証局が、CAAレコードの
issueで許可されているか - 識別名にtypo(入力ミス)がないか
- 上位ドメインに設定されたCAAレコードが、意図せず適用されていないか
- ワイルドカード証明書の場合、
issuewildの設定が邪魔をしていないか
設定したのに変更が反映されない
DNSの変更は、キャッシュの影響で、反映までに時間がかかることがあります。CAAレコードを変更した直後は、認証局側が古い情報を参照している可能性があるため、TTLの時間が経過してから、再度証明書の発行を試してみてください。
DNSの問い合わせ自体に失敗する
認証局がCAAレコードを確認する際に、DNSサーバーからエラーが返ってくると、安全のために発行が見送られることがあります。DNSSECの設定を含め、DNSの応答が正しく返っているかを確認しましょう。
よくある質問
CAAレコードは必ず設定しないといけませんか?
いいえ、設定は必須ではありません。CAAレコードがなくても、サイトは問題なく表示され、証明書も通常どおり発行されます。ただし、セキュリティを高める目的で、設定しておくことが推奨されています。
CAAレコードを設定すると、サイトの表示や検索順位に影響しますか?
CAAレコードは、ブラウザがサイトを表示する際には参照されないため、表示速度や検索順位に直接影響することはありません。
すでに発行済みの証明書は、CAAレコードの設定で無効になりますか?
いいえ、無効にはなりません。CAAレコードが確認されるのは、新規発行や更新のタイミングです。すでに発行済みの証明書は、有効期限まで使用できます。
設定を間違えたらどうなりますか?
許可すべき認証局が抜けていると、次回の証明書の発行や更新に失敗する可能性があります。設定後は、実際に使っている認証局が許可されているかを、必ず確認しましょう。
まとめ
CAAレコードについて、要点を整理します。
- CAAレコードは、そのドメインの証明書を発行してよい認証局を指定するDNSレコードである
- 認証局は、証明書を発行する前にCAAレコードを確認することが義務づけられている
- 主なタグは、通常の証明書用の
issue、ワイルドカード用のissuewild、報告先のiodefである - ドメイン直下に設定すれば、配下のサブドメインにも同じルールが適用される
- 設定は必須ではないが、証明書の不正発行のリスクを減らす効果がある
- 利用中のサービスが使う認証局を許可し忘れると、証明書の更新に失敗する
- 設定後は、dig・nslookup・ドメインチェッカーなどで登録内容を確認する
CAAレコードは、地味ながら、ドメインのセキュリティを高めてくれる設定です。設定を追加する際は、実際に使っている認証局をしっかり洗い出したうえで、慎重に進めましょう。ドメインの現在の設定を確認したいときは、ドメインチェッカーなどのツールもぜひ活用してください。