DNSSECチェック
ドメインを入力すると、ルートゾーンから順に署名の連鎖をたどります。ドメインが未署名なのか、署名済みで有効なのか、設定が途中なのか、壊れているのか、そしてどのレコードを直せばよいのかがわかります。
DNSSECがふさぐ穴
コンピューターが「example.comのアドレスは?」と尋ねると、答えは保護されていない小さなパケットで返ってきます。本来のDNSには、受け取った側が誰の書いたものかを確かめる手段がありません。あなたとネームサーバーの間にいる者や、偽の答えをリゾルバーのメモリに紛れ込ませた者は、訪問者やメールを自分の選んだマシンへ送ることができます。
DNSSECは署名を加えます。ゾーンの所有者はすべてのレコードの組に秘密鍵で署名し、対になる公開鍵をDNSKEYレコードとしてゾーンに公開します。答えを受け取ったリゾルバーはその署名(RRSIG)も受け取り、レコードが所有者の公開したものとまったく同じであることを検証できます。DNSSECは何も暗号化せず、どの名前を調べたかも隠しません。答えが本物であることを証明する、それだけです。
指紋の連鎖
データと同じ場所に置かれた公開鍵では、たいした証明になりません。偽造者は両方を差し替えられるからです。そこで各ゾーンは、一つ上のゾーンに保証してもらいます。親ゾーンは子の鍵の短い指紋(ダイジェスト)であるDSレコードを公開し、自分の鍵でそれに署名します。親の鍵も同じようにその親が保証し、それがルートゾーンまで続きます。リゾルバーがあらかじめ知っておく必要があるのはルートの鍵だけで、これはリゾルバーのソフトウェアに同梱されています。
example.comの場合、経路は次のとおりです。ルートの鍵、ルートにあるcomのDS、comの鍵、comにあるexample.comのDS、example.comの鍵、署名されたレコード。一つでも欠けたり間違ったりしていれば、証明は失敗します。
DSレコードは、DNSホストの外にある部分です。レジストラーを通じてレジストリに渡され、失敗の多くはこの分担から生まれます。
このチェックが行うこと
ルート、トップレベルゾーン、そしてあなたのドメインまでの各ゾーンについて、当サーバーは親にあるDSレコードとゾーンのDNSKEYレコードを読み取ります。検証をオフにした状態(「checking disabled」フラグ)で公開リゾルバー経由で読むため、壊れたゾーンでも中身を調べられます。鍵ごとにキータグを計算し、DSごとに同じハッシュ関数(RFC 4034)で鍵からダイジェストを計算し直して、1バイトずつ比較します。
次に、検証を行う三つの公開リゾルバー(Cloudflare、Google、Quad9)に、今度は検証をオンにしてドメインのSOAレコードを尋ねます。答えを検証できたリゾルバーはADフラグ(「認証済みデータ」)を立てます。問題を見つけたリゾルバーはSERVFAILを返します。指紋の照合は当サーバーが自分で行いますが、署名の検証はしません。その判定はリゾルバーに任せています。
| 判定 | 見つかったもの | 影響 |
|---|---|---|
| 未署名 | DSもDNSKEYもない | どこでも動きますが、答えを検証できません。大半のドメインがこれです。 |
| 署名済みで有効 | DSが鍵と一致し、リゾルバーがADを立てる | 検証リゾルバーは偽の答えを拒否します。 |
| 設定が途中 | DNSKEYはあるがDSがない | 動きますが、誰も署名を確認していません。 |
| 壊れている | 一致する鍵のないDS、または検証オンのときだけSERVFAIL | 検証リゾルバーを使う人全員から到達できません。 |
このチェックはさらに、廃止済みまたは弱いアルゴリズム(RSA/MD5、DSA、RSA/SHA-1、DS内のSHA-1ダイジェスト)、古い鍵の残りのDS、有効期限まで3日を切った署名を指摘し、存在しない名前の証明にゾーンがNSECとNSEC3のどちらを使っているかも示します。
壊れた連鎖を直す
壊れた連鎖は、DNSSECがまったくない状態より悪いものです。検証リゾルバーが答えを拒否するからです。よくある経緯はこうです。ドメインを新しいDNSホストへ移したが、古いDSレコードがレジストラーに残り、それがもう存在しない鍵を指している。
- すぐに復旧したい場合は、レジストラーで
DSレコードを削除します。ドメインは未署名になり、キャッシュが切れれば(通常1日以内に)誰にとっても動くようになります。 - DNSSECを維持したい場合は、現在のDNSホストのDNSSECページを開き、表示される
DSレコード(キータグ、アルゴリズム、ダイジェストタイプ、ダイジェスト)をコピーして、古いものと置き換える形でレジストラーに入力します。 - 次の引っ越しの前には、まず
DSレコードを削除して1日待ち、ネームサーバーを変更してから、署名して新しいDSを公開します。
「設定が途中」の場合は、DSレコードを公開して作業を終えるか、DNSホストで署名をオフにしてください。
リゾルバーは、失敗も含めて答えを、レコードのTTLが許す限り保持します。修正した直後は、このページにしばらく古い状態が表示されることがあり、リゾルバーごとに結果が食い違うこともあります。
よくある質問
ドメインにDNSSECは必要ですか?
任意で、大半のドメインはなしで運用されています。DNSSECは偽のDNS応答から訪問者とメールを守り、メールサーバー向けのDANEのように、これを必須とする用途もいくつかあります。DNSホストとレジストラーがスイッチ一つで対応しているなら、有効にする手間はわずかです。DNSホストを頻繁に移すなら、毎回の引っ越しを慎重に計画してください。
DSレコードとDNSKEYレコードの違いは?
DNSKEYは公開鍵で、DNSホストがあなた自身のゾーンに公開します。DSはその鍵の指紋で、レジストラーを通じて親ゾーン(.com、.org)に公開されます。あなたのゾーンを連鎖につなぐのはDSです。
自分ではサイトが見られるのに、ほかの人には見られないのはなぜですか?
DNSSECが壊れている場合、何が起こるかは訪問者ごとのリゾルバー次第です。検証するリゾルバー(Google、Cloudflare、Quad9、多くの大手プロバイダー)はエラーを返します。検証しないリゾルバーは普通に答えます。チェックを実行してみてください。「壊れている」の判定に「検証オフ:応答あり」と出ていれば、まさにこの状況です。
KSKとZSKとは何ですか?
ゾーン内の鍵の二つの役割です。鍵署名鍵(KSK、フラグ257)は鍵の組だけに署名し、DSレコードが指すのはこの鍵です。ゾーン署名鍵(ZSK、フラグ256)はそれ以外のすべてのレコードに署名し、レジストラーに触れずに交換できます。一つの鍵で両方を兼ねるホストもあります。
ゾーンにはどのDNSSECアルゴリズムを使うべきですか?
現在はアルゴリズム13(ECDSA P-256とSHA-256)が一般的な選択で、署名が小さく広く対応しています。アルゴリズム8(RSAとSHA-256)でも問題ありません。アルゴリズム5と7はSHA-1に依存しているので置き換えるべきです。アルゴリズム1、3、6、12は廃止されています。
DNSSECの変更が反映されるまでどのくらいかかりますか?
ほとんどのレジストラーでは、DSの変更は数分でレジストリに届きます。しかしリゾルバーは以前のDSをそのTTLの間保持し、.comではそれが24時間であることがよくあります。結果を判断するのは丸1日待ってからにしてください。