Linuxコマンド

opensslコマンドでSSLサイトのプロトコルを確認する方法

Linux系のOSでは標準で使用できるopensslコマンドですが、
実はSSL化されたサイトのハンドシェークプロトコルを調べられます。
覚えてしまえば便利なので、Webサイトの管理している人や
アプリケーション開発している人にもおすすめできる調査方法です。

プロトコルを調べる

プロトコル調査はs_clientオプション

opensslには沢山のオプションがありますが、
s_clientオプションを使うことでWebアクセスをする際の
SSLハンドシェークが実施可能です。
ハンドシェークさせることでサーバ側が使っているプロトコルや証明書の情報など、
サーバ証明書に関する情報が取得可能です。

$ openssl s_client -connect <対象サーバのFQDN>:<ポート番号>
$ openssl s_client -connect www.google.com:443
CONNECTED(00000003)
depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
verify return:1
---
Certificate chain
 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
   i:C = US, O = Google Trust Services, CN = GTS CA 1O1
 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
   i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEwTCCA6mgAwIBAgIRAO93GGFLfHwOCAAAAAAucZgwDQYJKoZIhvcNAQELBQAw
QjELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFUdvb2dsZSBUcnVzdCBTZXJ2aWNlczET
MBEGA1UEAxMKR1RTIENBIDFPMTAeFw0yMDAyMTIxMTQ3NDFaFw0yMDA1MDYxMTQ3
〜〜〜省略〜〜〜
-----END CERTIFICATE-----
subject=C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
issuer=C = US, O = Google Trust Services, CN = GTS CA 1O1
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: ECDSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2633 bytes and written 386 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 256 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
#途中で止まるはずなので、Ctrl + Cを押して抜ける

このコマンド、実は自分でリクエストヘッダを書いて送信することができるので途中で止まります。
telnetみたいなイメージですね。
まぁ、プロトコルの調査には残りの機能が必要ないのでCtrl + Cで止めます。

New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384

この部分ですが、TLSv1.3って書いてありますね。
Googleは世界的な推奨値TLSv1.3だけを使うようにしているみたいですね。
右側にあるCipher is の部分は暗号化プロトコル(暗号スイート)の値が出力されます。
そのほかにも、証明書チェーンやその他証明書内の情報が書かれているので、
適用した証明書がおかしくないのかを確認するときにも使えますね。

SNIを利用しているサイトには

SNIサイトの調査はservernameオプション追加

$ openssl s_client -connect www.serverbuild.net:443 -servername www.serverbuild.net

SNIを使っている場合は、上記のように-servernameを付与して実施します。
例えばレンタルサーバなどを利用している場合は、SNIが有効になっている場合が多いので
オプションを指定することで確認することができるようになります。

-Linuxコマンド
-

© 2020 サーバ構築.net Powered by AFFINGER5