2026年6月13日

2026年6月13日

CAAレコードとDSレコード(DNSSEC)を併用する設定|証明書の発行を止めないための順序と確認

CAAレコードとDSレコードは同時に使えますし、組み合わせると「この認証局だけが証明書を発行できる」という指定を、DNSの偽装から守れるようになります。ただし、DNSSECの信頼の連鎖が一か所でも切れると、認証局はCAAを読めなくなり、証明書の新規発行も更新も止まります。この記事では、2つのレコードがそれぞれどこに置かれ、どう関係するのかを整理したうえで、安全に併用するための作業順序と、発行が止まったときの確認方法を説明します。

CAAとDSは置き場所も役割も違う

最初に押さえておきたいのは、2つのレコードが別のゾーンに載るという点です。

  • CAAレコード: 自分のゾーン(example.com の権威DNS)に置きます。「どの認証局に発行を許可するか」を書くレコードで、認証局は証明書を発行する前にこれを問い合わせます。
  • DSレコード: 親ゾーン(.com や .jp のレジストリ)に置かれます。自分では直接書けず、ドメインを管理しているレジストラの画面から登録します。中身は自分のゾーンの鍵(DNSKEY)のハッシュ値で、「このゾーンは署名されていて、正しい鍵はこれ」と親が保証する役割です。

DSが登録されると、検証するリゾルバは親のDS → 子のDNSKEY → CAAの署名(RRSIG)の順にたどって、CAAの応答が本物かを確かめます。認証局はDNSSECを検証するリゾルバでCAAを引くので、併用すると、途中で応答を書き換えてCAAの制限をすり抜ける攻撃を防げます。

連鎖が切れたときに発行が止まる理由

認証局の運用ルールを定めるCA/ブラウザフォーラムのBaseline Requirementsでは、CAAの問い合わせに失敗したとき、一定の条件を満たせば「CAAなし」として発行してよいとされています。その条件の一つが「そのゾーンにルートからのDNSSECの連鎖が無いこと」です。言い換えると、DSが登録されている署名済みのゾーンでCAAの問い合わせが失敗すると、認証局は発行を断ります。

さらに、CAAとドメイン認証の問い合わせでDNSSECの検証を認証局に求める改定が進められ、2026年から適用されています(2026年10月現在)。適用日や細かな条件は改定が続くことがあるため、最新のBaseline Requirementsで確認してください。Let's Encrypt のように以前から検証している認証局もあります。

Let's Encrypt で連鎖が切れていると、次のようなエラーで更新が失敗します。

DNS problem: SERVFAIL looking up CAA for example.com - the domain's nameservers may be malfunctioning

エラー文に「CAA」とあっても、原因がCAAの値ではなくDNSSECの側にあることが多いのが、この組み合わせのつまずきどころです。

併用するときの作業順序

CAAとDNSSECを一度に有効にすると、失敗したときにどちらが原因か分からなくなります。1つずつ進めて、そのたびに確認します。

1. 署名なしの状態でCAAを設定して発行を確かめる

まずCAAだけを設定します。使っている認証局の識別子は、各認証局の公式ドキュメントに書かれています。ホスティング会社の無料SSLを使っている場合は、そのサービスがどの認証局から発行しているかを先に確認してください。許可していない認証局を使っていると、自動更新がそこで止まります。

example.com.  3600 IN CAA 0 issue "letsencrypt.org"
example.com.  3600 IN CAA 0 issuewild ";"
example.com.  3600 IN CAA 0 iodef "mailto:security@example.com"

issuewild ";" はワイルドカード証明書の発行をどの認証局にも許可しない、という意味です。ワイルドカード証明書を使っているなら、この行は書かずに issuewild で認証局を指定します。設定したら、テスト環境(Let's Encrypt なら certbot renew --dry-run など)で発行が通ることを確かめます。

2. DNSサービス側でゾーンの署名を有効にする

DNSサービスの管理画面でDNSSECを有効にします。この時点ではまだDSを登録しないので、署名されていても検証には使われず、失敗しても影響はありません。CAAの応答に署名が付いているかを確認します。

# CAA と、その署名(RRSIG CAA)が返るか
dig example.com CAA +dnssec +multiline

応答に RRSIG CAA の行があれば、CAAも署名されています。サブドメインの証明書を使う場合は、www.example.com など実際の名前でも問い合わせます。CAAが無い名前では、「存在しない」ことの証明(NSECまたはNSEC3)に署名が付いて返ります。

3. レジストラにDSを登録する

DNSサービスが表示するDS情報(キータグ・アルゴリズム・ダイジェスト種別・ダイジェスト)を、レジストラの画面に登録します。登録の形式や画面はレジストラによって異なり、DSではなく公開鍵そのものの入力を求めるところもあります。

4. 検証するリゾルバでCAAが引けるかを確認する

ここが併用でもっとも大切な確認です。Aレコードが引けるだけでは十分ではありません。認証局が問い合わせるのはCAAなので、CAAそのものを検証付きで確かめます。

# 検証するリゾルバで CAA を問い合わせる(ad フラグが付けば検証成功)
dig @1.1.1.1 example.com CAA +dnssec
dig @8.8.8.8 www.example.com CAA +dnssec

# 失敗したら、検証を外した(+cd)結果と比べる
dig @1.1.1.1 example.com CAA +cd

通常の問い合わせが SERVFAIL で、+cd を付けると答えが返る場合は、DNSSECの検証失敗です。最後に、もう一度テスト環境で証明書の発行を試します。

「Aは引けるのにCAAだけ失敗する」ケース

サイトは表示されるのに証明書の更新だけ失敗する場合は、CAAの問い合わせに限って検証が失敗していることを疑います。考えられる原因を、よくある順に挙げます。

  1. CAAが無い名前の「不在の証明」が正しく署名されていない: CAAを設定していないサブドメインでは、DNSサーバーが署名付きの「この種類のレコードは無い」という応答を返す必要があります。DNSサーバーのソフトウェアやサービスの不具合でこの応答がおかしいと、CAAの問い合わせだけが失敗します。+cd との比較で切り分け、DNSサービスに問い合わせるか、CAAを明示的に設定して回避します。
  2. 委任先のサブドメインで連鎖が切れている: shop.example.com を別のDNSサービスに委任している場合、そのゾーンにも独自のDSとDNSKEYが必要です。認証局は証明書の名前から親へ向かってCAAを探すため、途中のどのゾーンが失敗しても発行は止まります。
  3. 古いDSが残っている: DNSサービスを移行したのに旧サービスのDSを消していないと、すべての問い合わせが失敗します。この場合はAも引けなくなるので、症状で見分けられます。

DNSViz のような可視化ツールにドメインを入力すると、どのゾーンのどの段階で連鎖が切れているかを図で確認できます。

DNSサービスを移行するときの注意

CAAとDNSSECを併用しているドメインで一番事故が起きやすいのは、DNSサービスの移行です。旧サービスのDSが親に残ったままネームサーバーを切り替えると、新しいサービスの鍵と一致せず、証明書の更新を含めてすべてが止まります。安全な順序は次のとおりです。

  1. レジストラでDSを削除し、親ゾーンのDSのTTLが過ぎるまで待つ
  2. 新しいDNSサービスにCAAを含むレコードを移し、内容を照合する
  3. ネームサーバーを切り替え、署名なしの状態でCAAの応答と証明書の発行を確認する
  4. 新しいサービスで署名を有効にし、新しいDSを登録する

証明書の有効期限が近い時期にこの作業を重ねると、DNSの問題で更新が止まったときに余裕がなくなります。期限まで日数があるときに作業するか、作業前に手動で更新しておくと安心です。

まとめ

  • CAAは自分のゾーン、DSは親ゾーン(レジストラ経由)に置く。併用するとCAAの応答が改ざんされていないことを認証局が確かめられる
  • 署名済みのゾーンでCAAの問い合わせが失敗すると、認証局は発行を断る。DNSSECの不具合が証明書の更新停止として表に出る
  • CAAの設定 → 署名の有効化 → DSの登録の順に1つずつ進め、そのたびにCAAを検証付きで問い合わせて確かめる
  • 「Aは引けるがCAAだけ失敗」は、不在の証明の署名や委任先ゾーンの連鎖を疑い、+cd との比較で切り分ける
  • DNSサービスの移行では、先にDSを外してから切り替え、最後に新しいDSを登録する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲