$Id: howto-dnssec.html,v 1.8 2001/04/13 05:53:36 sakane Exp $
%Hd: DNSSEC で遊ぶ
o はじめに
ドキュメントはソースの doc/arm/Bv9ARM.htmlから辿れる。
RFC は読んどいた方がよい。
RFC2535: Domain Name System Security Extensions
RFC2536: DSA KEYs and SIGs in the Domain Name System
RFC2537: RSA/MD5 KEYs and SIGs in the Domain Name System
RFC2538: Storing Certificates in the Domain Name System
RFC2541: DNS Security Operational Considerations
環境は tanu.org. の下にテスト用に sec.tanu.org. を作る。
o RFC2536 の KEY/SIG RR を作ってみる。
親となるzone(tanu.org.)の鍵対を作る。
dnssec-keygen を使って zone key という鍵対を作る。
dnssec-keygenは、DSA以外のアルゴリズムとして RSA,DH,HMAC-MD5が使える。
Q. どのアルゴリズムがいいのか?
A. RFC2535 section 3.2 says:
Algorithm specific formats and procedures are given in separate
documents. The mandatory to implement for interoperability algorithm
is number 3, DSA. It is recommended that the RSA/MD5 algorithm,
number 1, also be implemented. Algorithm 2 is used to indicate
Diffie-Hellman keys and algorithm 4 is reserved for elliptic curve.
Q. 鍵長はどの位あれば十分なのか?
A. See RFC2541 Section 4. Public/Private Key Size Considerations
Q. FreeBSD4.2 + OpenSSL0.9.6 において 2001/04/10時点で root で鍵を作ると
dnssec-keygen: failed to generate key sec.tanu.org/DSA: out of entropy
などと怒られる。
A. /dev/urandom を使う。
または一般ユーザで起動して、キーボードを使って乱数を生成する。
アルゴリズムは DSAを使う。
# dnssec-keygen -r /dev/urandom -a DSA -b 768 -n ZONE tanu.org.
Ktanu.org.+003+55565
2つのファイルが作られる。
Ktanu.org.+003+55565.key DSA公開鍵。KEY RR
Ktanu.org.+003+55565.private 秘密情報
RSAで言う所のPKCS#1だと思う。DSAではなんて言うんだろ?
子供となるzone(sec.tanu.org.)の鍵対を作る。
# dnssec-keygen -r /dev/urandom -a DSA -b 768 -n ZONE sec.tanu.org.
Ksec.tanu.org.+003+45420
同じく2つのファイルが作られる。
Ksec.tanu.org.+003+45420.key
Ksec.tanu.org.+003+45420.private
親(tanu.org.)にサインしてもらうために dnssec-makekeysetを使って子供(sec.tanu.org.)の鍵セット(?)を作る。TTLは1日に設定。
Q. -s/-e を指定しないと?
-> dnssec-makekeyset で作った時から1ヵ月に設定している。
# dnssec-makekeyset -r /dev/urandom -t 3600 Ksec.tanu.org.+003+45420.key
keyset-sec.tanu.org.
KEY RR と子供の SIG RR が入ったファイル keyset-sec.tanu.org. が作られる。
子供(sec.tanu.org.)へサインするには dnssec-signkey を使う。
# dnssec-signkey -r /dev/urandom keyset-sec.tanu.org. Ktanu.org.+003+55565
signedkey-sec.tanu.org.
KEY RR と親の SIG RR が入ったファイル keyset-sec.tanu.org. が作られる。
Q. ドキュメントでは 2つの zone keysを使っているが何のため?
子供(sec.tanu.org.)は自分のzoneファイルにサインするために dnssec-signzoneを使う。
# dnssec-signzone -r /dev/urandom -o sec.tanu.org sec.tanu.org.zone
sec.tanu.org.zone.signed
sec.tanu.org.zone.signed というファイルが作られるので、これを sec.tanu.org. のzoneファイルに使う。
Q. NXT RR って何?
named.confを編集して、zone(sec.tanu.org.) を追加する。
zone "sec.tanu.org." IN {
type master;
file "sec.tanu.org.zone.signed";
:
//trusted-keys
//{
// "name" - - - "keygits";
//}
o RFC2538の CERT RRを作ってみる。
CERT RR として使えるデータは以下が定義されている。
Value Mnemonic Certificate Type
----- -------- ----------- ----
0 reserved
1 PKIX X.509 as per PKIX
2 SPKI SPKI cert
3 PGP PGP cert
4-252 available for IANA assignment
253 URI URI private
254 OID OID private
255-65534 available for IANA assignment
65535 reserved
アルゴリズムは RFC2353 に定義されている。
VALUE Algorithm
0 - reserved, see Section 11
1 RSA/MD5 [RFC 2537] - recommended
2 Diffie-Hellman [RFC 2539] - optional, key only
3 DSA [RFC 2536] - MANDATORY
4 reserved for elliptic curve crypto
5-251 - available, see Section 11
252 reserved for indirect keys
253 private - domain name (see below)
254 private - OID (see below)
255 - reserved, see Section 11
さて、試しに tanu.sec.tanu.org の CERT RR を作ってみる。
最初に PEM形式のX.509 証明書を用意する。
参照 http://mine.kame.net/~sakane/doc/public/howto-ssleay.html
CAがいないので、サイン用の親(sec.tanu.org)の鍵対を作る。
ついでに自己署名の証明書も作る。
% openssl genrsa -out sec.tanu.org.privkey.pem 1024
% openssl req -new -nodes -newkey rsa:1024 -md5 -keyform PEM \
-keyout sec.tanu.org.privkey.pem -outform PEM \
-out sec.tanu.org.request.pem
% openssl x509 -req -in sec.tanu.org.request.pem \
-signkey sec.tanu.org.privkey.pem \
-md5 -out sec.tanu.org.cert.pem
次に tanu.sec.tanu.org の証明書を作る。
% openssl genrsa -out tanu.sec.tanu.org.privkey.pem 1024
% openssl req -new -nodes -newkey rsa:1024 -md5 -keyform PEM \
-keyout tanu.sec.tanu.org.privkey.pem \
-outform PEM -out tanu.sec.tanu.org.request.pem
% openssl x509 -req -in tanu.sec.tanu.org.request.pem \
-signkey sec.tanu.org.privkey.pem \
-md5 -out tanu.sec.tanu.org.cert.pem
できた tanu.sec.tanu.org.cert.pem から
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
を除いて CERT RR として使う。
type は 1, algorithm は 1 を指定する。
Q. key tag って何?
こんなかんじ。
tanu.sec.tanu.org. IN CERT 1 1 1 MIICaTCCAdICAQAwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCSlAxETAPBgNVBAgTCEthbmFnYXdhMREwDwYDVQQHEwhGdWppc2F3YTEVMBMGA1UEChMMV0lERSBQcm9qZWN0MRUwEwYDVQQLEwxLQU1FIFByb2plY3QxGjAYBgNVBAMTEXRhbnUuc2VjLnRhbnUub3JnMB4XDTAxMDQxMDA3NDU1NFoXDTAxMDUxMDA3NDU1NFowfTELMAkGA1UEBhMCSlAxETAPBgNVBAgTCEthbmFnYXdhMREwDwYDVQQHEwhGdWppc2F3YTEVMBMGA1UEChMMV0lERSBQcm9qZWN0MRUwEwYDVQQLEwxLQU1FIFByb2plY3QxGjAYBgNVBAMTEXRhbnUuc2VjLnRhbnUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA6iBypmwfge2iVy8UYVzYjadGbJpoYiRptfn31gK8bntROAwSQO8E0/6TalU4fe+Sfwxc1/ROkfXkNyuzfaOOt+A1WMvXirJWUB4SX2pxe2HcjbFD9K2qmDtMQgWkm0NuGhPekwxDY+j20f4AKXMks3FuPybn7dkEl1Ly1CArVwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG+9Pmmuwd6QFyz8vAtftAamuFK5YoEV96e6PgbyEpF3GX2txM/WFqNvwZ4DHYp/3pyk21jLYSG0P+kJcCLksKlWVKhLGY82Ex/QWSbXoNmA8iIXtsHsKDERNs7zdsIPWL51bsJuyBQhdSgc++JIwGa8fRGJfOouxcQvBN6Qx8O+
zoneファイルを書き換えたら dnssec-signzone するのを忘れずに。
% dig @papa.tanu.org sec.tanu.org. cert
;; Truncated, retrying in TCP mode.
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31375
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5
;; QUESTION SECTION:
;sec.tanu.org. IN CERT
;; ANSWER SECTION:
sec.tanu.org. 3581 IN CERT PKIX 1 RSAMD5 MIICXzCCAcgCAQAwDQYJKoZIhvcNAQEEBQAweDELMAkGA1UEBhMCSlAx ETAPBgNVBAgTCEthbmFnYXdhMREwDwYDVQQHEwhGdWppc2F3YTEVMBMG A1UEChMMV0lERSBQcm9qZWN0MRUwEwYDVQQLEwxLQU1FIFByb2plY3Qx FTATBgNVBAMTDHNlYy50YW51Lm9yZzAeFw0wMTA0MTAwNzQ0MjdaFw0w MTA1MTAwNzQ0MjdaMHgxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhLYW5h Z2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUgUHJv amVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRUwEwYDVQQDEwxzZWMu dGFudS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMDqIHKm bB+B7aJXLxRhXNiNp0ZsmmhiJGm1+ffWArxue1E4DBJA7wTT/pNqVTh9 75J/DFzX9E6R9eQ3K7N9o4634DVYy9eKslZQHhJfanF7YdyNsUP0raqY O0xCBaSbQ24aE96TDENj6PbR/gApcySzcW4/Juft2QSXUvLUICtXAgMB AAEwDQYJKoZIhvcNAQEEBQADgYEAl4p05Um8ULGUlc6DPDGnzhN8fBeX PMQAwzGEDf+RytIQ1ckSch5BbLpV/cp3TBqRLVPYvcf0Anj+Agjn6LZL gI68wBnWLb94kZ9gYE/0ZlPQ7+lw+PNqhuK+fsHzz4/Ob6LY5Jq6HZZN ImN0JWfY/Ibief8YN31Pogg8XgJWDT0=
;; AUTHORITY SECTION:
sec.tanu.org. 3581 IN NS papa.tanu.org.
sec.tanu.org. 3581 IN NS nymph.wide.ydc.co.jp.
sec.tanu.org. 3581 IN NS orange.kame.net.
;; ADDITIONAL SECTION:
papa.tanu.org. 3600 IN A 203.178.141.195
papa.tanu.org. 3600 IN AAAA 2001:200:0:4819:260:8ff:fec9:9d58
nymph.wide.ydc.co.jp. 86400 IN A 202.249.27.1
nymph.wide.ydc.co.jp. 86400 IN AAAA 3ffe:501:481d::3
nymph.wide.ydc.co.jp. 86400 IN AAAA 2001:200:101:2000::3
;; Query time: 4 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Apr 11 10:03:41 2001
;; MSG SIZE rcvd: 856