発行した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