openssl s_clientコマンドでウェブサーバのSSL/TLS対応状況を確認



●OpenSSLのバージョン確認

 参考URL:openssl s_client コマンドでウェブサーバの SSL/TLS 対応状況を診断する

 OpenSSLのバージョンを確認します。
$ openssl version
OpenSSL 1.1.1k  FIPS 25 Mar 2021


●基本的なコマンド

 非SNIなウェブサーバに SSL/TLS 接続する場合

 「非SNIなウェブサーバ」は、そのウェブサーバ(1IPアドレス)に1ドメインのウェブサイトのみが設置されたウェブサーバです(名前ベースのバーチャルホスト設定がされていない)。
$ openssl s_client -connect www.bigbang.mydns.jp:443


 SNIなウェブサーバに SSL/TLS 接続する場合

 「SNIなウェブサーバ」は、1つのウェブサーバに複数のウェブサイト(複数ドメイン)が設置されたウェブサーバです(名前ベースのバーチャルホスト設定がされている)。

 実行例

 自宅サーバ(www.bigbang.mydns.jp)の証明書の階層は下記のようになっています。



$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1  ← ルート証明書(1階層目)
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3  ← 中間証明書(2階層目)
verify return:1
depth=0 CN = www.bigbang.mydns.jp  ← サーバ証明書(3階層目)
verify return:1
---
Certificate chain  ← サーバ証明書のチェーン
 0 s:CN = www.bigbang.mydns.jp  ← サーバ証明書のオブジェクト
   i:C = US, O = Let's Encrypt, CN = R3  ← サーバ証明書の発行者
 1 s:C = US, O = Let's Encrypt, CN = R3  ← 中間証明書のサブジェクト
   i:C = US, O = Internet Security Research Group, CN = ISRG Root X1  ← 中間証明書の発行者
 2 s:C = US, O = Internet Security Research Group, CN = ISRG Root X1  ← ルート証明書のサブジェクト
   i:O = Digital Signature Trust Co., CN = DST Root CA X3  ← ルート証明書の発行者
---
Server certificate  ← サーバ証明書
-----BEGIN CERTIFICATE-----
MIIFLTCCBBWgAwIBAgISA7dT8mQCx7KepvBhADT4qOseMA0GCSqGSIb3DQEBCwUA
 :
(省略)
 :
DGRI9XTIFxyoqUqdrpm7/Pt9UKg0mZL+joUCYO8Vo40s
-----END CERTIFICATE-----
subject=CN = www.bigbang.mydns.jp

issuer=C = US, O = Let's Encrypt, CN = R3

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 4565 bytes and written 382 bytes
Verification: OK
---
New, TLSv1.2, Cipher is TLS_AES_128_GCM_SHA256  ← 使用されたTLSバージョンと暗号スイート
Server public key is 2048 bit  ← サーバ公開鍵のサイズ
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : TLS_AES_128_GCM_SHA256
    Session-ID: CB2E(省略:接続のたびに毎回変わる)AEA0
    Session-ID-ctx: 
    Resumption PSK: C825(省略:接続のたびに毎回変わる)C0A4
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 56 53 19 25 eb 59 b5 e8-1d 22 2e c4 a3 c2 6b 36   VS.%.Y..."....k6
 :
(省略)
 :
    00c0 - 73 87 be 71 0a c6 fb 50-e7 79 47 e7 da 55 10 53   s..q...P.yG..U.S

    Start Time: 1639230536
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
 コマンド実行直後でエラーは発生していません。
 「使用されたTSLバージョンと暗号スイート」として「New, TLSv1.2, Cipher isTLS_AES_128_GCM_SHA256」と表示されていますので、特に問題ありません。
 通信に問題がある場合は「New, (NONE), Cipher is (NONE)」といった表示になります。

●-quietオプション

 -quietを付加して実行すると、表示される情報が少なくなります。
$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -quiet
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1  ← ルート証明書(1階層目)
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3  ← 中間証明書(2階層目)
verify return:1
depth=0 CN = www.bigbang.mydns.jp  ← サーバ証明書(3階層目)
verify return:1


●SSL/TLSのバージョンを指定するオプション

 参考URL:openssl s_client コマンドでウェブサーバーの SSL/TLS 対応状況を診断する
 参考URL:SSLProtocol Directive

 SSL/TLSのバージョンを指定するオプションは下記のとおりです。
  • SSLv3
  • TLSv1
  • TLSv1.1(OpenSSL 1.0.1以降で利用可能)
  • TLSv1.2(OpenSSL 1.0.1以降で利用可能)
  • TLSv1.2(OpenSSL 1.1.1以降で利用可能)
  • all
 設定例は下記のとおりです。
SSLProtocol -All +TLSv1.2
 自宅サーバのSSL/TLS対応状況をCheck Website Security | DigiCert SSLToolsで確認します。



 TLS2.0のみ対応しています。

 では、このウェブサーバーに対して各オプションを指定して openssl s_client コマンドを実行してみます。

 -tls1オプション

$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -tls1
CONNECTED(00000003)
139717909100352:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1544:SSL alert number 70  ← エラーとなっている
---
no peer certificate available  ← 有効な証明書がない
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 133 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)  ← SSL/TLSバージョンも暗号スイートもなし
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1639362012
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
---
 自宅サーバはTLSv1.0には対応していないため、1行目でエラーになり、SSL/TLSバージョンのところでもNONEになっています。

 -tls1_1オプション

$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -tls1_1
CONNECTED(00000003)
139986884671296:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1544:SSL alert number 70  ← エラーとなっている
---
no peer certificate available  ← 有効な証明書がない
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 133 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)  ← SSL/TLSバージョンも暗号スイートもなし
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1639363022
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
---
 自宅サーバはTLSv1.0には対応していないため、1行目でエラーになり、SSL/TLSバージョンのところでもNONEになっています。

 -tls1_2オプション

$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -tls1_2
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = www.bigbang.mydns.jp
verify return:1
---
Certificate chain
 0 s:CN = www.bigbang.mydns.jp
   i:C = US, O = Let's Encrypt, CN = R3
 1 s:C = US, O = Let's Encrypt, CN = R3
   i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
 2 s:C = US, O = Internet Security Research Group, CN = ISRG Root X1
   i:O = Digital Signature Trust Co., CN = DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFLTCCBBWgAwIBAgISA7dT8mQCx7KepvBhADT4qOseMA0GCSqGSIb3DQEBCwUA
 :
(省略)
 :
DGRI9XTIFxyoqUqdrpm7/Pt9UKg0mZL+joUCYO8Vo40s
-----END CERTIFICATE-----
subject=CN = www.bigbang.mydns.jp

issuer=C = US, O = Let's Encrypt, CN = R3

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 4678 bytes and written 314 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 7054(省略)8DAA
    Session-ID-ctx: 
    Master-Key: 95BC(省略)324C
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 73 be b7 a1 21 f4 67 47-15 fc 0e e7 d8 f3 2f f9   s...!.gG....../.
 :
(省略)
 :
    00b0 - 52 30 88 b7 7c 8c b9 3d-15 fb bd e8 59 3a 8c 19   R0..|..=....Y:..

    Start Time: 1639363467
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: yes
---
 自宅サーバはTLSv1.2には対応しているため、SSL/TLSバージョンのところがTLSv1.2になっています。

 -no_ssl3 オプション

$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -no_ssl3
(省略)
(-tls1_2の結果と同じになる)


 -no_tls1オプション

$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -no_tls1
(省略)
(-tls1_2の結果と同じになる)


 -no_tls1_1オプション

$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -no_tls1_1
(省略)
(-tls1_2の結果と同じになる)


 -no_tls1_2オプション

$ openssl s_client -connect www.bigbang.mydns.jp:443 -servername www.bigbang.mydns.jp -no_tls1_2
CONNECTED(00000003)
140516154849088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1544:SSL alert number 70
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 233 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
 TLSv1.2以外には対応していないため、1行目でエラーになり、SSL/TLSバージョンのところがNONEになっています。

●SMTPS接続を確認する

 参考URL:openssl s_client で SMTP STARTTLS と SMTP AUTH を動作確認する

 openssl s_client コマンドを使用してSMTPSの接続を確認するには下記のようにします。
 まず、事前準備として、AUTH LOGIN コマンドでSMTPS接続する際のアカウント、パスワードをBASE64エンコードしておきます。
$ printf 'username' | base64
dXNlcm5hbWU=
$ printf 'password' | base64
cGFzc3dvcmQ=
 ODNのメールサーバに接続してログインできるか確認します。

$ openssl s_client -connect smtpssl.odn.ne.jp:465
CONNECTED(00000003)
depth=2 C = JP, O = "SECOM Trust Systems CO.,LTD.", OU = Security Communication RootCA2
verify return:1
depth=1 C = JP, O = "Cybertrust Japan Co., Ltd.", CN = Cybertrust Japan SureServer CA G4
verify return:1
depth=0 C = JP, ST = Tokyo, L = Minato-ku, O = SoftBank Corp., CN = smtpssl.odn.ne.jp
verify return:1
---
Certificate chain
0 s:C = JP, ST = Tokyo, L = Minato-ku, O = SoftBank Corp., CN = smtpssl.odn.ne.jp
i:C = JP, O = "Cybertrust Japan Co., Ltd.", CN = Cybertrust Japan SureServer CA G4
1 s:C = JP, O = "Cybertrust Japan Co., Ltd.", CN = Cybertrust Japan SureServer CA G4
i:C = JP, O = "SECOM Trust Systems CO.,LTD.", OU = Security Communication RootCA2
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHLDCCBhSgAwIBAgIUHbcYS7l2EWXZhAfe0rxNC1EZdR4wDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u
LCBMdGQuMSowKAYDVQQDEyFDeWJlcnRydXN0IEphcGFuIFN1cmVTZXJ2ZXIgQ0Eg
RzQwHhcNMjMwMjA2MDE1NDQzWhcNMjQwMjI5MTQ1OTAwWjBmMQswCQYDVQQGEwJK
UDEOMAwGA1UECBMFVG9reW8xEjAQBgNVBAcTCU1pbmF0by1rdTEXMBUGA1UEChMO
U29mdEJhbmsgQ29ycC4xGjAYBgNVBAMTEXNtdHBzc2wub2RuLm5lLmpwMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy2MTrjCewgO0GGZSmoVS5pkVB/bN
sKJ/S3pQs4c6WrbccUSEXLhBYtiwWmyGd8Lz7SnAqw9zuslG1kxM+ybWokgY26rC
j6GAQxIlH0hJF4jJbT0/1rPnpozcDPLL5hlNYDmaSzx0y5zDEt4e4vP1Mxpf4C5f
pyJcbnaoqYR9hf4RENf2vFonKc1kfJ7zqcpximk3YiMlCRfTRvf96GOuwer4dChe
WTMR19SIRyDelvyULaJy3ioRzAldjMOkowEK5mWIvnZhm2kK1rYqZb2C+VPnuOi5
aW13w1bGRO3ckMLvlWiG8LlSPd5tAYBCfBg2tuNIx/6RtF3LOBGtTtqDSwIDAQAB
o4ID2DCCA9QwDAYDVR0TAQH/BAIwADBmBgNVHSAEXzBdMFEGCSqDCIybEQEXATBE
MEIGCCsGAQUFBwIBFjZodHRwczovL3d3dy5jeWJlcnRydXN0Lm5lLmpwL3NzbC9y
ZXBvc2l0b3J5L2luZGV4Lmh0bWwwCAYGZ4EMAQICMBwGA1UdEQQVMBOCEXNtdHBz
c2wub2RuLm5lLmpwMIGLBggrBgEFBQcBAQR/MH0wNQYIKwYBBQUHMAGGKWh0dHA6
Ly9zc29jc3AuY3liZXJ0cnVzdC5uZS5qcC9PY3NwU2VydmVyMEQGCCsGAQUFBzAC
hjhodHRwOi8vY3JsLmN5YmVydHJ1c3QubmUuanAvU3VyZVNlcnZlci9vdmNhZzQv
b3ZjYWc0LmNydDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
CCsGAQUFBwMCMB8GA1UdIwQYMBaAFGKn0trehbaS8YW89uiVnXWg+k4fMEYGA1Ud
HwQ/MD0wO6A5oDeGNWh0dHA6Ly9jcmwuY3liZXJ0cnVzdC5uZS5qcC9TdXJlU2Vy
dmVyL292Y2FnNC9jZHAuY3JsMB0GA1UdDgQWBBRLhwAAzyFyKLy+OdRt35a+/EJV
WzCCAfcGCisGAQQB1nkCBAIEggHnBIIB4wHhAHUA7s3QZNXbGs7FXLedtM0TojKH
Rny87N7DUUhZRnEftZsAAAGGJIogCQAABAMARjBEAiBGu1c4z0k6MRNytseIeQCN
0tp4WTAZBfdLYfS3wvYVpgIgdzO42oiSf4p/Lap9eQjDH4ZLThkmm3VULKvbR5a/
kO4AdwB2/4g/Crb7lVHCYcz1h7o0tKTNuyncaEIKn+ZnTFo6dAAAAYYkiiasAAAE
AwBIMEYCIQCIesbsL6HzWZefbC4gAiEbw/WFKVpUfP9A/u5dwvi1QQIhAJsmNMl5
K9PupyH06QZfWO6Hq9YTH6xTS880LjRi9p7uAHYAVYHUwhaQNgFK6gubVzxT8MDk
OHhwJQgXL6OqHQcT0wwAAAGGJIpaFgAABAMARzBFAiEA5MjjoETmh99cEfxbEe5g
unCxCOe6gRmT9szPM05gFawCIFsYhTdctiSyUINBtfJV0V3Cbw6lL6nADnWzBrHK
IzVQAHcAc9meiRtMlnigIH1HneayxhzQUV5xGSqMa4AQesF3crUAAAGGJIpeuwAA
BAMASDBGAiEA9d6LvwM+uVMan895Jw2GCe0CIYCOsSp7BVdt+OjXQ8ECIQCdP7Pi
DuVMaAoPWVlQV3YzAkKTPSYHxjNEzqrcxj7CZzANBgkqhkiG9w0BAQsFAAOCAQEA
YX6cOFOemwIexnGLsDNt/mnnrr2cRjnzdHqKtNuacfEWclE+Fh2YnJtxtyW/lDdZ
sEY9OkBz4ba4GBZcpTjEKmOIGRD/TrZpGo3WsAcfMgqS9xlfK6JDyjT1Ytw0GPEA
B5vf4CmA7S31bE+JXs7+hh4XfyL0tAjw0THnOBSKWWE+eHE9r5+HfBp8x/51ddOA
xQNLzRCVuxohky7z+0LitcVjUdOx3q055BM2z6temqNV01++dxVB9y09fWSDXQgq
Owdw9BA7dFwzoqLmeweakVfptJ9GGD+GUUrTsj+Z5sGA73CO5qfdyflzu7HaqtxZ
WdDrpLci49GWi+/TANHFGQ==
-----END CERTIFICATE-----
subject=C = JP, ST = Tokyo, L = Minato-ku, O = SoftBank Corp., CN = smtpssl.odn.ne.jp

issuer=C = JP, O = "Cybertrust Japan Co., Ltd.", CN = Cybertrust Japan SureServer CA G4

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3618 bytes and written 441 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 44D3167CB8B6AB016CDAC024603F92C92B770B5782A590DD29086A30B04F6259
Session-ID-ctx:
Master-Key: 8FAFAA9558861BD8DABE79905F994ABC5F8EC699E967927C06D666176FCFF64821966DC4FC74532BB1BB5B38AE214511
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1696912731
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: yes
---
220 msrg1011.rgserv.odn.ne.jp ESMTP Service ready
ehlo smtpssl.odn.ne.jp
250-msrg1011.rgserv.odn.ne.jp
250-DSN
250-8BITMIME
250-PIPELINING
250-AUTH=LOGIN
250-AUTH LOGIN PLAIN
250 SIZE 20971520
auth login
334 VXNlcm5hbWU6 ← "Username:" が BASE64 エンコードされている
dXNlcm5hbWU=
334 UGFzc3dvcmQ6 ← "Password:" が BASE64 エンコードされている
cGFzc3dvcmQ=
235 login authentication successful ← 認証成功
MAIL FROM: test@***.odn.ne.jp
250 2.1.0 Ok
RCPT TO: ***@@mail.bigbang.mydns.jp
250 2.1.5 Ok ← メールリレー成功
QUIT
221 2.0.0 Bye


 「235 login authentication successful」が表示されれば、認証は成功です。