2006年06月08日
システム管理者の心得? 〜 OpenSSLコマンドで証明書をチェック(2)
$ openssl s_client -connect localhost:4433
CONNECTED(00000003)
depth=0 (subject)
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 (subject)
verify error:num=27:certificate not trusted
verify return:1
depth=0 (subject)
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:(subject)
i:(issuer)
---
Server certificate
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
subject=(subject)
issuer=(Issuer)
---
No client certificate CA names sent
---
SSL handshake has read 1116 bytes and written 250 bytes
---
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 512 bit
SSL-Session:
Protocol : TLSv1
Cipher : EDH-RSA-DES-CBC3-SHA
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Start Time: 1149746479
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
verify error: とか最後の Verify return code: 21 って気になりますよね?
そうなんです、一応通信はできてはいますが証明書の検証ができていないんです。
SSLで通信する際には、受け取った証明書が正しいものかどうかを検証する必要があります。
大抵のブラウザには、はじめからいくつかの認証局の証明書がインストールされており、自動で検証してくれるので気にならないかもしれませんが、openssl コマンドを使う場合には CA証明書を手動で指定しなければいけません。CA証明書の入手方法は・・・・ってここにリンク先を書くのはお行儀が悪いので、ご利用の認証機関のサイトを訪ねてみてください。
で、CA証明書のファイル名を CA.pem とした場合、s_client では以下のように指定します。
$ openssl s_client -connect localhost:4433 -CAfile CA.pem
すると、実行結果はこんな感じになります。
CONNECTED(00000003)
depth=2 .....
verify return:1
depth=1 .....
verify return:1
depth=0 .....
verify return:1
---
Certificate chain
0 s:(subject)
i:(issuer)
---
Server certificate
-----BEGIN CERTIFICATE-----
(中略)
-----END CERTIFICATE-----
subject=(subject)
issuer=(issuer)
---
No client certificate CA names sent
---
SSL handshake has read 1116 bytes and written 250 bytes
---
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 512 bit
SSL-Session:
Protocol : TLSv1
Cipher : EDH-RSA-DES-CBC3-SHA
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Start Time: 1149748977
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
かなりすっきりしました。
やはり Verify return code: 0 (ok) は気持ちがいいものです。
また、万一証明書の有効期限が切れている場合は、
Verify return code: 10 (Certificate has expired)
な感じになります。
klab_gijutsu2 at 15:56│Comments(0)│TrackBack(0)