DNSSEC署名を行いました

少し前になりますが、192.jpゾーンへDNSSEC署名を行うとともに、上位ゾーンに当たるjpゾーンへDS登録を行い、2013-08-30 23:40頃に192.jpにおいて信頼の連鎖を構築しました

簡単にDNSSEC対応を進めるまでの流れを記します。

鍵ペアを作成する

まずはDNSSECで用いる2つの鍵ペア、KSKとZSKを作成します。

% dnssec-keygen -K keys -a RSASHA256 -b 2048 -f ksk -r /dev/urandom 192.jp
% dnssec-keygen -K keys -a RSASHA256 -b 1024 -r /dev/urandom -Pnow -A now -D 20140731235959 192.jp

鍵はそれぞれ次のような形で準備します。

  • KSK: RSA 2048ビット、SHA-256
  • ZSK: RSA 1024ビット、SHA-256

パラメータとして次を与えました。

  • 鍵はあらかじめ用意したkeysディレクトリへ出力するよう-Kで指定した
  • KSKの場合は-fでKSKのフラグを指定した
  • 乱数の精度を求めないため、-rの乱数の生成源として/dev/urandomを指定した
  • ZSKは直ちに利用開始、公開とし、ドメインの登録年月日までを有効期限とした(タイムゾーンはローカル=JSTでした)

ゾーンへ署名する

続いて作成した鍵ペアでゾーンを署名します。署名は既に存在するゾーンファイルを入力として操作します。

% dnssec-signzone -K keys -N keep -o 192.jp -3 3e41d0 -S db.192.jp

この操作を行うと鍵ディレクトリに存在する対象ドメインの鍵を用いて署名操作を行い、入力ゾーンファイル名に.signedが付きます。

  • 鍵ファイルの置かれているディレクトリを-Kで指定した
  • 入力となるゾーンファイルのSOAシリアルを書き換えないよう-Nで指定した
  • ゾーンファイル名とドメインが一致しないため-oでドメインを明示した
  • NSEC3による不存在証明を行うため-3とハッシュ演算に用いるソルト値(16進数文字列表記で、DNS応答で公開されます)を指定した
  • 鍵は自動的に選択されるスマート署名機能を使うよう-Sを指定した
  • 入力となるゾーンファイルを最後のパラメータで指定した

署名済みゾーンを公開する

署名が終わると素のゾーンファイルとは異なるファイルが生成されるため、読み込むゾーンファイルの修正を行います。Ubuntuを使っている場合は/etc/bind/named.conf.localに追記します。

zone "192.jp" {
    type master;
    file "/etc/bind/zone/db.192.jp.signed";
};

修正が終わったところで再読み込みを行います。

% sudo service bind9 reload

この時点でこのネームサーバーへ問い合わせると署名情報付きで応答を返します。digコマンドで+dnssec(DNSSEC OKビット)を立てて問い合わせると通常の応答(ここではAレコード)の応答に加えAレコードの署名情報をRRSIGレコードとして応答します。

% dig 192.jp +dnssec +norec @ns1.192.jp

; <<>> DiG 9.8.1-P1 <<>> 192.jp +dnssec +norec @ns1.192.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31859
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;192.jp.                                IN      A

;; ANSWER SECTION:
192.jp.                 300     IN      A       182.48.52.251
192.jp.                 300     IN      RRSIG   A 8 2 300 20130929135520 20130830135520 62943 192.jp. w/6GMSeGdioLwtJ5x4diE8bAHcmnEZukXTgNMamORr9uqLSARuSke2rK S2fpx0bq9z26tJEHDsKhZYGKAnugL1xNQtF5o6LQIBkpf67esYpQNGBh GBNnklMBUCUCdZKeQyH72By8XzjXfXr3ihOWqmRROlmzvV27fDFv6KO4 /2Q=

DS情報を登録する

署名されたゾーンを公開したところで上位ゾーンへDS情報の登録を行います。上位ゾーンとは通常TLDゾーンを指し、今回はJPレジストリへの登録となります。JPレジストリへDS情報を登録する場合はレジストラ(指定事業者)がDS登録に対応している必要があります。

登録するDS情報の値はdnssec-signzoneコマンドによりdsset-192.jp.というファイル名で出力されます。

% cat dsset-192.jp.
192.jp.                 IN DS 48841 8 1 64F04252603A565F5702335F0D62FFA4CE52642C
192.jp.                 IN DS 48841 8 2 1AAD1740AB6DBC7FA2FD9E47D114ACA3B39941B4E10F238E6D765991 3FC9F6CC

上位ゾーンへDS情報の登録が済んだらdigコマンドで確認を行います。

% dig 192.jp -t ds +norec @a.dns.jp

; <<>> DiG 9.8.1-P1 <<>> 192.jp -t ds +norec @a.dns.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55437
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;192.jp.                                IN      DS

;; ANSWER SECTION:
192.jp.                 86400   IN      DS      48841 8 1 64F04252603A565F5702335F0D62FFA4CE52642C
192.jp.                 86400   IN      DS      48841 8 2 1AAD1740AB6DBC7FA2FD9E47D114ACA3B39941B4E10F238E6D765991 3FC9F6CC
192.jp.                 86400   IN      RRSIG   DS 8 2 86400 20130923174502 20130824174502 10515 jp. JHEpncyCe1+PI4g5y43cVSvZS8ERiqWV q0HkDB/kpcdcnGghJuHDso23gOFzdDO4 tIgkkQhZtozDDZPIUiTBdaATEb8ZteOu dmUt22rNJ/xTdZOg40NOS2267K/CW5m7 1Xs//kGicODDFYj7wUWLFV5fclQJqIqq bb1p6BsT/Rk=

確認をする

上位ゾーンへDS情報の登録が終わると無事にDNSSEC対応が完了となります。DNSvizで確認するとルートゾーンから192.jpゾーンまで鍵の連鎖が構築されています。


Posted

in

,

by

Tags:

Comments

One response to “DNSSEC署名を行いました”

  1. […] DNSSEC署名を行いました […]

Leave a Reply

Your email address will not be published. Required fields are marked *