発行したSSLサーバ証明書と中間CA証明書を実際にApache等にインストールする前に、正しいかどうか検証したいことがある。
その場合は、OpenSSLのopensslコマンドで検証することができる。
openssl s_serverでサーバを起動
s_serverは、リモートのクライアントからのSSL/TLSの接続を受け入れる一般的なSSL/TLSサーバを実装している。
openssl s_server -cert <サーバ証明書ファイル> -key <秘密鍵ファイル> -CAfile <中間証明書ファイル>
実行例:
$ openssl s_server -cert server.crt -key server.key -CAfile intermediate.crt Using default temp DH parameters Using default temp ECDH parameters ACCEPT
openssl s_clientでチェック
起動したサーバに openssl s_client で接続して、証明書を検証する。
s_clientは、リモートのサーバに対するSSL/TLSの接続を確立する一般的なSSL/TLSクライアントを実装している。
openssl s_client -connect localhost:4433 -CAfile <CA証明書ファイル>
CA証明書ファイルの例:
- Mac OS X
/etc/openssl/cert.pem
/opt/local/etc/openssl/cert.pem、/opt/local/share/curl/curl-ca-bundle.crt (MacPortsの場合) -
Ubuntu (ca-certificates をインストールしておく)
/etc/ssl/certs/ca-certificates.crt -
CentOS
/etc/pki/tls/certs/ca-bundle.crt にあるが、指定しなくても大丈夫。
実行例:
$ openssl s_client -connect localhost:4433 -CAfile /opt/local/share/curl/curl-ca-bundle.crt
CONNECTED(00000003)
depth=3 (略)
verify return:1
depth=2 (略)
verify return:1
depth=1 (略)
verify return:1
depth=0 (略)
verify return:1
---
Certificate chain
0 s:(略)
i:(略)
1 s:(略)
i:(略)
2 s:(略)
i:(略)
3 s:(略)
i:(略)
---
Server certificate
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
subject=(略)
issuer=(略)
---
No client certificate CA names sent
---
SSL handshake has read 4744 bytes and written 443 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: (略)
Session-ID-ctx:
Master-Key: (略)
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
(略)
Compression: 1 (zlib compression)
Start Time: 1421023132
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
実際にサーバにインストールしたら、s_clientで以下のように証明書をチェックする。
-servername は、SNI(Server Name Indication)のために必要。
実行例:
-
Mac OS X
(CAfileはMacPortsの場合)$ openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts -CAfile /opt/local/etc/openssl/cert.pem
-
CentOS
$ openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts
-
Ubuntu
(ca-certificates をインストールしておく)$ openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts -CAfile /etc/ssl/certs/ca-certificates.crt
証明書の有効期限をチェックしたい場合は、
$ echo | openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts 2>/dev/null | openssl x509 -noout -dates


