Linux系のOSでは標準で使用できるopensslコマンドですが、
実はSSL化されたサイトのハンドシェークプロトコルを調べられます。
覚えてしまえば便利なので、Webサイトの管理している人や
アプリケーション開発している人にもおすすめできる調査方法です。
プロトコルを調べる
プロトコル調査はs_clientオプション
opensslには沢山のオプションがありますが、
s_clientオプションを使うことでWebアクセスをする際の
SSLハンドシェークが実施可能です。
ハンドシェークさせることでサーバ側が使っているプロトコルや証明書の情報など、
サーバ証明書に関する情報が取得可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
$ 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で止めます。
1 |
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 |
この部分ですが、TLSv1.3って書いてありますね。
Googleは世界的な推奨値TLSv1.3だけを使うようにしているみたいですね。
右側にあるCipher is の部分は暗号化プロトコル(暗号スイート)の値が出力されます。
そのほかにも、証明書チェーンやその他証明書内の情報が書かれているので、
適用した証明書がおかしくないのかを確認するときにも使えますね。
SNIを利用しているサイトには
SNIサイトの調査はservernameオプション追加
1 |
$ openssl s_client -connect www.serverbuild.net:443 -servername www.serverbuild.net |
SNIを使っている場合は、上記のように-servernameを付与して実施します。
例えばレンタルサーバなどを利用している場合は、SNIが有効になっている場合が多いので
オプションを指定することで確認することができるようになります。