接続先が許可しているProtocolとCipherをチェックする

#はじめに
社内のシステムにHTTPSで接続しようとした際にエラーが発生し、原因を追及するために接続先で使えるProtocolとCipherを調べる必要がありました。
サーバーの設定を見ないとわからないと思っていましたが、どうやらクライアント側からも調べられるようなので記録として残しておきます。

#動作確認環境
OS:Window 10

#1. TestSSLServer4.exeをダウンロード
[https://www.bolet.org/TestSSLServer/](https://www.bolet.org/TestSSLServer/)
にアクセスし、以下の場所からソースコードではなく、バイナリ(TestSSLServer4.exe)をダウンロードします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/131481/eb5eac18-cd3a-ca8f-39f1-af8c9121a14f.png)

#2. チェック
以下のようにDOS窓で実行することで、接続先で使えるProtocolやCipherがわかります

```
C:\dev\TestSSLServer>TestSSLServer4.exe www.facebook.com 443
Connection: www.facebook.com:443
SNI: www.facebook.com
  TLSv1.0:
     server selection: enforce server preferences
     3f- (key:   EC)  ECDHE_ECDSA_WITH_AES_128_CBC_SHA
     3f- (key:   EC)  ECDHE_ECDSA_WITH_AES_256_CBC_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_AES_128_CBC_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_AES_256_CBC_SHA
     3-- (key:  RSA)  RSA_WITH_AES_128_CBC_SHA
     3-- (key:  RSA)  RSA_WITH_AES_256_CBC_SHA
     3f- (key:   EC)  ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
     3-- (key:  RSA)  RSA_WITH_3DES_EDE_CBC_SHA
     3f- (key:   EC)  ECDHE_ECDSA_WITH_RC4_128_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_RC4_128_SHA
     3-- (key:  RSA)  RSA_WITH_RC4_128_SHA
  TLSv1.1: idem
  TLSv1.2:
     server selection: complex
     3-- (key:  RSA)  RSA_WITH_RC4_128_SHA
     3-- (key:  RSA)  RSA_WITH_3DES_EDE_CBC_SHA
     3-- (key:  RSA)  RSA_WITH_AES_128_CBC_SHA
     3-- (key:  RSA)  RSA_WITH_AES_256_CBC_SHA
     3-- (key:  RSA)  RSA_WITH_AES_128_GCM_SHA256
     3-- (key:  RSA)  RSA_WITH_AES_256_GCM_SHA384
     3f- (key:   EC)  ECDHE_ECDSA_WITH_RC4_128_SHA
     3f- (key:   EC)  ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
     3f- (key:   EC)  ECDHE_ECDSA_WITH_AES_128_CBC_SHA
     3f- (key:   EC)  ECDHE_ECDSA_WITH_AES_256_CBC_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_RC4_128_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_AES_128_CBC_SHA
     3f- (key:  RSA)  ECDHE_RSA_WITH_AES_256_CBC_SHA
     3f- (key:   EC)  ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
     3f- (key:   EC)  ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
     3f- (key:  RSA)  ECDHE_RSA_WITH_AES_128_GCM_SHA256
     3f- (key:  RSA)  ECDHE_RSA_WITH_AES_256_GCM_SHA384
     3f- (key:  RSA)  ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
     3f- (key:   EC)  ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
=========================================
+++++ SSLv3/TLS: 2 certificate chain(s)
+++ chain: length=2
names match:        yes
includes root:      no
signature hash(es): SHA-256
+ certificate order: 0
thumprint:  7AA970C4D34F963B182B945534D0BF40522C605F
serial:     025245D02918FECF45417523AFFF3990
subject:    CN=*.facebook.com,O=Facebook\, Inc.,L=Menlo Park,ST=California,C=US
issuer:     CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US
valid from: 2018-05-17 00:00:00 UTC
valid to:   2019-07-31 12:00:00 UTC
key type:   RSA
key size:   2048
sign hash:  SHA-256
server names:
   *.facebook.com
   *.facebook.net
   *.fb.com
   *.fbcdn.net
   *.fbsbx.com
   *.m.facebook.com
   *.messenger.com
   *.xx.fbcdn.net
   *.xy.fbcdn.net
   *.xz.fbcdn.net
   facebook.com
   fb.com
   messenger.com
+ certificate order: 1
thumprint:  A031C46782E6E6C662C2C87C76DA9AA62CCABD8E
serial:     04E1E7A4DC5CF2F36DC02B42B85D159F
subject:    CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US
issuer:     CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
valid from: 2013-10-22 12:00:00 UTC
valid to:   2028-10-22 12:00:00 UTC
key type:   RSA
key size:   2048
sign hash:  SHA-256
+++ chain: length=2
names match:        yes
includes root:      no
signature hash(es): SHA-256
+ certificate order: 0
thumprint:  BD258C1F62A4A6D9CF7D9812D22E2FF57E84FB36
serial:     0B3C3B601A18F59EE2B6BB05605EF2C0
subject:    CN=*.facebook.com,O=Facebook\, Inc.,L=Menlo Park,ST=California,C=US
issuer:     CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US
valid from: 2017-12-15 00:00:00 UTC
valid to:   2019-03-22 12:00:00 UTC
key type:   EC
key size:   256
key curve:  ansix9p256r1 (P-256)
sign hash:  SHA-256
server names:
   *.facebook.com
   *.xx.fbcdn.net
   *.fbsbx.com
   *.xz.fbcdn.net
   *.facebook.net
   *.xy.fbcdn.net
   *.messenger.com
   fb.com
   *.fbcdn.net
   *.fb.com
   *.m.facebook.com
   messenger.com
   facebook.com
+ certificate order: 1
thumprint:  A031C46782E6E6C662C2C87C76DA9AA62CCABD8E
serial:     04E1E7A4DC5CF2F36DC02B42B85D159F
subject:    CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US
issuer:     CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
valid from: 2013-10-22 12:00:00 UTC
valid to:   2028-10-22 12:00:00 UTC
key type:   RSA
key size:   2048
sign hash:  SHA-256
=========================================
Server compression support: no
Server sends a random system time.
Secure renegotiation support: yes
Encrypt-then-MAC support (RFC 7366): no
SSLv2 ClientHello format (for SSLv3+): yes
Minimum EC size (no extension):   256
Minimum EC size (with extension): 256
ECDH parameter reuse:  no
Supported curves (size and name) ('*' = selected by server):
  * 256  secp256r1 (P-256)
=========================================
WARN[CS005]: Server supports RC4.
WARN[CS006]: Server supports cipher suites with no forward secrecy.

```

今回はオプションは指定せず実行しましたが、オプションを指定すればファイルにログが出力できたり、もう少し細かい情報も出力できたりします。

ちなみにインターネット上であれば、オンラインのSSLチェッカーでも確認できます。オンラインチェッカーのURLは、以下参考URLに載せておきました。

# 参考URL
[https://geekflare.com/ssl-test-certificate/](https://geekflare.com/ssl-test-certificate/)
[https://www.ssllabs.com/ssltest/](https://www.ssllabs.com/ssltest/)
[https://sslanalyzer.comodoca.com/](https://sslanalyzer.comodoca.com/)