opensslコマンドで接続先のサーバーが対応している暗号化プロトコルを確認する方法

目次

スポンサードリンク

openssl s_clientコマンドは、SSL/TLS接続をテストするためのコマンドラインツールです。WebサーバーとのSSL/TLS接続をシミュレートし、サーバーの証明書情報、暗号スイート、プロトコルバージョンなどを確認することができます。

基本的な使い方

確認対象の接続先ホスト名とポート番号を指定して以下のコマンドを実行します。

openssl s_client -connect <ホスト名>:<ポート>

使用するプロトコルや暗号スイートを指定するオプションもあります。

  • -cipher : 使用する暗号スイートを指定する。
  • -tls1.2: TLS 1.2を使用する。
  • -tls1.3: TLS 1.3を使用する。

接続が成功するケース

以下コマンドは TLS1.2を使用して、当ブログのサーバーに接続しています。接続が成功するため、証明書の情報やTLSハンドシェイクの状況などが表示されます。

[root@hostname tmp]# openssl s_client -connect uchy.me:443 -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 = R11
verify return:1
depth=0 CN = uchy.me
verify return:1
---
Certificate chain
0 s:CN = uchy.me
i:C = US, O = Let's Encrypt, CN = R11
1 s:C = US, O = Let's Encrypt, CN = R11
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE7DCCA9SgAwIBAgISA9SHf99iH/M7TPEh9c9L5xMOMA0GCSqGSIb3DQEBCwUA
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
EwNSMTEwHhcNMjQwODI2MjMxMzQ4WhcNMjQxMTI0MjMxMzQ3WjASMRAwDgYDVQQD
Ewd1Y2h5Lm1lMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzA3+7PM0
5CbWoyxxeE4VGaCxqlpnHggqyL5YUdCiK5ZNsCIayI693et5KWpAJE/P1SVDqkr8
9b82ci5FrBrF18VXDLBuKPxJtLdGCnKd89bmX8RczHZkVxR1+3JJS7B8QgzQfvgF
HccAA0un+/U5vzdLeQO3jcMLJatfzywHUeGM+VnLwimdPi69SHu8rN5t8edgAV6h
80BgPc4ZAEx1TrSxVEDXN7GfGKkRT9vRjllpbcFBYuB5CRYYlQhf38q1K71L0emn
pUDIV9QKF8X9MkqeEkyVM0YOHD1GEEs1C1+VDoNE0ghH+7VT697k8EH9HXzhFfRE
xzxpGtFyq9dCEQIDAQABo4ICGTCCAhUwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW
MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTG
RcfEdBOpxEQ3mJHgZBXB3XaKKzAfBgNVHSMEGDAWgBTFz0ak6vTDwHpslcQtsF6S
LybjuTBXBggrBgEFBQcBAQRLMEkwIgYIKwYBBQUHMAGGFmh0dHA6Ly9yMTEuby5s
ZW5jci5vcmcwIwYIKwYBBQUHMAKGF2h0dHA6Ly9yMTEuaS5sZW5jci5vcmcvMB8G
A1UdEQQYMBaCB3VjaHkubWWCC3d3dy51Y2h5Lm1lMBMGA1UdIAQMMAowCAYGZ4EM
AQIBMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcAPxdLT9ciR1iUHWUchL4NEu2Q
N38fhWrrwb8ohez4ZG4AAAGRkS0dkgAABAMASDBGAiEA5yVHDeCzVx3UB4eCKvOH
+QmGyXJgoyxTnX/ZZFKJ5oQCIQCc20XJHCp/e7bEAW174zfY2h+VOiWhzm6b1+FM
/gO+2AB2AO7N0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABkZEtHZAA
AAQDAEcwRQIgEANo1ZTGy1+42R1sDmX+K8AB2N7OGpAp7mm5ATWxT78CIQDWE86o
DyQh+sCpTYbmOpKLkLGVP72iKVwZf38Naq9ULzANBgkqhkiG9w0BAQsFAAOCAQEA
uRmT2peMOM8OT24onJ6HHsxT8clrExJAOQlNPf2alb6VLiYVP3MxOccnycRt0xbc
VYSLU4iEwNGSttFZH/NbGySSyG4n/cutdEEFrIcgrRgtk5l+yNDQAoCP4d0+YHX7
hymApeRrKKiX05ZFd7A9JBXR1IRdauDGljeo67hspocEW3EANxCMB8j+/4ZUYRu3
gY2iPV54lOXy29y070ifALmra7tV/ZJvCJYGOxKt7OCRpAvcUJvQr3kSRk9wrmb+
6DX//Qj7yi4JRGle+stSlq3CtuiiBxggqainj+eRpaknnhVc1MdWgPjf5ZQc1rz8
pP30lBH5J29ZiGskEHcHTQ==
-----END CERTIFICATE-----
subject=CN = uchy.me

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

---
No client certificate CA names sent
Peer signing digest: SHA512
Peer signature type: RSA
Server Temp Key: ECDH, P-521, 521 bits
---
SSL handshake has read 3315 bytes and written 402 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
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-AES256-GCM-SHA384
    Session-ID: AC6E27EA1D88CFF8167BCBBDFC94FE6F1EDD23240CD4005347ED67834974534F
    Session-ID-ctx:
    Master-Key: 2C3516E48B9B68DC34A8F45EA404D578F7FBCA2D0E46FD9343454DADE96C488B17E56FB220FFBA33BBC9E859E743EC8C
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 0f 6f bd a3 59 e4 26 e5-14 f6 4d 10 0d 3c d5 cc   .o..Y.&...M..<..
    0010 - 92 5a 4f 3a 79 b2 6a 2d-01 01 af b0 f3 05 c6 bf   .ZO:y.j-........
    0020 - 7a dd 9a 41 7d 81 ca d8-cc af f4 93 84 a1 04 db   z..A}...........
    0030 - fa 30 e5 f5 e2 78 39 00-d6 4c 84 38 1d 65 20 9b   .0...x9..L.8.e .
    0040 - e9 91 89 7e 9d 88 93 79-19 16 e7 4a 28 bc 3c 5d   ...~...y...J(.<]
    0050 - 9b bb 56 69 73 b7 1e 0f-c0 3e b2 54 67 84 e9 67   ..Vis....>.Tg..g
    0060 - 21 c2 3d 3a c4 36 9d 9e-a5 36 dc 2d 1f 8f c8 27   !.=:.6...6.-...'
    0070 - 68 86 01 74 93 94 4f d1-50 2c 19 79 14 44 8a b5   h..t..O.P,.y.D..
    0080 - 91 ea 2e 92 25 69 7a 76-6d 00 00 fd e4 f1 a7 ca   ....%izvm.......
    0090 - ac 92 a8 7b c2 ac 9c 9a-19 45 f0 04 7e ac f2 7d   ...{.....E..~..}
    00a0 - a4 8f 81 67 89 08 2e 1f-5a 64 0e 15 d5 28 d9 14   ...g....Zd...(..
    00b0 - 4f 50 2e 76 00 8b bc bc-03 d8 88 b6 ec f8 3f 5e   OP.v..........?^

    Start Time: 1727403515
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
---

接続エラーになるケース

以下コマンドは TLS1.3を使用して、当ブログのサーバーに接続しています。サーバー側がTLS1.3には対応していないため接続が失敗しエラーメッセージが表示されています。

[root@hostname tmp]# openssl s_client -connect uchy.me:443 -tls1_3
CONNECTED(00000003)
140470019659584:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1544:SSL alert number 40
---
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)
---

検証したopensslのバージョン

[root@hostname tmp]# rpm -qa | grep openssl
openssl-1.1.1k-12.el8_9.x86_64

関連記事

sshコマンドで接続先のサーバーが対応している暗号化スイートを確認する方法



Linuxコマンドについて学べるおすすめ書籍
Linuxコマンドの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

Linux教科書 図解でパッとわかる LPIC/LinuC
はじめてLPICを受ける方向け、手を動かしながらLinuxについて学びたい方におすすめ。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。

Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 icon