『NTP認証: ユニキャスト・共通鍵認証篇』で既に紹介済みだが、ntpパッケージには、
ntp-keygen
というコマンドが付属している。このコマンドで、NTPの認証に使用する共通鍵や公開鍵・証明書を生成することができる。基本的な使い方は簡単で、引数なしで起動すれば、公開鍵・証明書を生成してくれる。オプションとして-M
オプションをつければ、共通鍵も生成する。共通鍵ファイルについては、『NTP認証: ユニキャスト・共通鍵認証篇』で述べた通りだ。では、このコマンドで生成された公開鍵・証明書はどうなっているのか、というのが今回のテーマだ。おさらいとして、公開鍵・証明書を生成するところからやってみよう。
# dd if=/dev/urandom of=/root/.rnd bs=1024 count=1 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 0.240445 seconds, 4.3 kB/s # ntp-keygen Using OpenSSL version 90801f Random seed file /root/.rnd 1024 bytes Generating RSA keys (512 bits)... RSA 0 40 46 1 11 24 3 1 2 Generating new host file and link ntpkey_host_ホスト名->ntpkey_RSAkey_ホスト名.3380508833 Using host key as sign key Generating certificate RSA-MD5 X509v3 Basic Constraints: critical,CA:TRUE X509v3 Key Usage: digitalSignature,keyCertSign Generating new cert file and link ntpkey_cert_ホスト名->ntpkey_RSA-MD5cert_ホスト名.3380508833 #最初の
dd
コマンドは、ntp-keygen
コマンド実行前に/root/.rnd
がない場合、エラーになるのを避けるためだ。メッセージを見ると、RSA 512bitの鍵を生成してる。今時512bitでもなかろうに、とも思わなくもないが、NTPプロトコル上の制限なのか…。
実際に生成されたファイルを確かめてみよう。
# cd /etc/ntp # ls -F keys ntpkey_RSA-MD5cert_ホスト名.3380508833 ntpkey_RSAkey_ホスト名.3380508833 ntpkey_cert_ホスト名@ ntpkey_host_ホスト名@ ntpservers step-tickers # cat ntpkey_RSAkey_ホスト名.3380508833 # ntpkey_RSAkey_ホスト名.3380508833 # Thu Feb 15 15:13:53 2007 -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-CBC,389C92663ECF5DB9 wrSy9Q++1KwQ13Day9uY8TlvpYweLEjHmLtd0YiJFFvdNahQMRru4Zc+YL+o4VZk <<略>> RiARMG0NVXvkBwpVIIykS5GhGVEjqbT9+ckvZ8C0q3E= -----END RSA PRIVATE KEY----- #むむ?パスワードを指定した覚えはないが…ソースコードを当たってみると、
-p パスワード
オプションが指定されなかった場合は、gethostname()
で得られるホスト名が使われるようだ。実際にそうなっているか、openssl rsa
コマンドを使って確認してみよう。# openssl rsa -text -noout < ホスト名.3380508833 Enter pass phrase: ← ホスト名を入力 Private-Key: (512 bit) modulus: 00:e2:7c:35:92:2a:de:15:18:1d:98:97:9c:5f:74: f6:4f:9b:e9:c7:0a:4a:db:2e:15:fc:6c:00:f6:8c: <<略>> 06:7b #確かにRSA 512bitになっている。
証明書を確認してみよう。
# cat ntpkey_RSA-MD5cert_ホスト名.3380508833 # ntpkey_RSA-MD5cert_ホスト名.3380508833 # Thu Feb 15 15:13:53 2007 -----BEGIN CERTIFICATE----- MIIBSzCB9qADAgECAgTJfnihMA0GCSqGSIb3DQEBBAUAMB0xGzAZBgNVBAMTEmlu YXp1bWEuZGVzdHJveWVyczAeFw0wNzAyMTUwNjEzNTNaFw0wODAyMTUwNjEzNTNa MB0xGzAZBgNVBAMTEmluYXp1bWEuZGVzdHJveWVyczBaMA0GCSqGSIb3DQEBAQUA A0kAMEYCQQDifDWSKt4VGB2Yl5xfdPZPm+nHCkrbLhX8bAD2jP//XaEh9g11C++l /xPXAxA4Q+88ehQq840V2wgq8o6pgznbAgEDoyAwHjAPBgNVHRMBAf8EBTADAQH/ MAsGA1UdDwQEAwIChDANBgkqhkiG9w0BAQQFAANBANaYyZ0ZUCd+fYt9DbuNMmVb T/pcR2rD2s7QuI2tJVa3ebmal/dz3nAPlfEadm35pQSAmjIpB0ebbOef1+EcqSA= -----END CERTIFICATE----- # openssl x509 -text -noout -in ntpkey_RSA-MD5cert_ホスト名.3380508833 Certificate: Data: Version: 3 (0x2) Serial Number: -914458463 (-0x3681875f) Signature Algorithm: md5WithRSAEncryption Issuer: CN=ホスト名 Validity Not Before: Feb 15 06:13:53 2007 GMT Not After : Feb 15 06:13:53 2008 GMT Subject: CN=ホスト名 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (512 bit) Modulus (512 bit): 00:e2:7c:35:92:2a:de:15:18:1d:98:97:9c:5f:74: f6:4f:9b:e9:c7:0a:4a:db:2e:15:fc:6c:00:f6:8c: ff:ff:5d:a1:21:f6:0d:75:0b:ef:a5:ff:13:d7:03: 10:38:43:ef:3c:7a:14:2a:f3:8d:15:db:08:2a:f2: 8e:a9:83:39:db Exponent: 3 (0x3) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Digital Signature, Certificate Sign Signature Algorithm: md5WithRSAEncryption d6:98:c9:9d:19:50:27:7e:7d:8b:7d:0d:bb:8d:32:65:5b:4f: fa:5c:47:6a:c3:da:ce:d0:b8:8d:ad:25:56:b7:79:b9:9a:97: f7:73:de:70:0f:95:f1:1a:76:6d:f9:a5:04:80:9a:32:29:07: 47:9b:6c:e7:9f:d7:e1:1c:a9:20 #極々シンプルな自己署名証明書になっている。有効期限は一年間だ。シリアル番号がランダマイズされているのは偉い…のか、管理するのが面倒だったからなのか(笑)。仕様的には問題ないはずだが、負のシリアル番号は初めて見た。
自己署名なので、当然IssuerとSubjectが同一になっている。マニュアルによれば、これはそれぞれ、
-s
と-i
オプションで変更できることになっている。しかし、オプションの名前から考えて、これは逆なんじゃなかろうか?実際に確かめてみよう。
- -i name
- Set the suject name to name. This is used as the subject field in certificates and in the file name for host and sign keys.
- -s name
- Set the issuer name to name. This is used for the issuer field in certificates and in the file name for identity files.
# rm *.3380508833 rm: remove 通常ファイル `ntpkey_RSA-MD5cert_ホスト名.3380508833'? y rm: remove 通常ファイル `ntpkey_RSAkey_ホスト名.3380508833'? y # ntp-keygen -i "subject.localnet" -s "issuer.localnet" Using OpenSSL version 90801f Random seed file /root/.rnd 1024 bytes Generating RSA keys (512 bits)... RSA 0 12 19 1 11 24 3 1 2 Generating new host file and link ntpkey_host_issuer.localnet->ntpkey_RSAkey_issuer.localnet.3380513148 Using host key as sign key Generating certificate RSA-MD5 X509v3 Basic Constraints: critical,CA:TRUE X509v3 Key Usage: digitalSignature,keyCertSign Generating new cert file and link ntpkey_cert_issuer.localnet->ntpkey_RSA-MD5cert_issuer.localnet.3380513148 # ls keys ntpkey_host_ホスト名 ntpkey_RSA-MD5cert_issuer.localnet.3380513148 ntpkey_host_issuer.localnet ntpkey_RSAkey_issuer.localnet.3380513148 ntpservers ntpkey_cert_ホスト名 step-tickers ntpkey_cert_issuer.localnet # openssl x509 -text -noout -in ntpkey_RSA-MD5cert_issuer.localnet.3380513148 Certificate: Data: Version: 3 (0x2) Serial Number: -914454148 (-0x36817684) Signature Algorithm: md5WithRSAEncryption Issuer: CN=subject.localnet Validity Not Before: Feb 15 07:25:48 2007 GMT Not After : Feb 15 07:25:48 2008 GMT Subject: CN=issuer.localnet Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (512 bit) Modulus (512 bit): 00:c5:c8:2d:6a:95:05:1e:7f:76:b3:7e:7a:f7:5b: 85:ff:00:76:b1:fe:32:62:d4:fe:41:9a:da:05:2f: 04:0f:f9:0b:97:b7:b7:0b:90:72:ba:9e:42:de:0a: d5:d8:3d:83:c2:e3:7d:b0:84:a4:56:ac:bf:f5:f0: c3:9e:6a:2e:11 Exponent: 3 (0x3) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: Digital Signature, Certificate Sign Signature Algorithm: md5WithRSAEncryption 16:a5:2b:bb:19:8e:79:e2:08:6d:f8:76:ed:99:db:f8:ed:22: 46:af:90:67:62:c5:cb:09:c7:03:e8:ea:1f:21:c0:90:3d:08: db:60:69:7c:e6:8e:47:5b:6a:9f:e9:e0:96:04:f7:a8:e7:d5: 08:eb:c3:53:67:6f:29:7f:40:9d #思った通り逆になっている。ファイル名はどうなるのかと思ったら、すべてに対して
-s
で指定したもの(issuer.localnet)が使われている。まあ、Issuerと言えば認証局(Certificate Authority, CA)のことで、CAは複数subjectに対して複数の証明書を発行するということを考えれば、ファイル名にIssuerの名前でなく、Subjectの名前が使われるのが自然だろう。そうでなければ、証明書のファイル名が衝突してしまうからだ。しかし、自己署名証明書のIssuerとSubjectが違うってのはどうだろう(笑)?
第一回:『NTP認証: ユニキャスト・共通鍵認証篇』
第二回:『NTP認証: ブロードキャスト・共通鍵認証篇』
第三回:『NTP認証: ntp-keygenコマンドとX.509証明書』
第四回:『NTP認証: ユニキャスト・公開鍵認証篇』
第五回:『NTP認証: マルチキャスト・共通鍵認証篇』