web-dev-qa-db-ja.com

「openssl s_client」を使用して、SSLv3サポート(がない)をテストするにはどうすればよいですか?

"Poodle"の脆弱性 を緩和するために、私のサーバー(この場合はHTTPSではなくTLS)でSSLv3サポートを無効にしたいと思います。 openssl s_clientこれを行ったことを確認するには?

119
Roger Lipscombe

OpenSSL s_client

SSLv3サポートが無効になっているかどうかを確認するには、次のコマンドを実行します

openssl s_client -connect example.com:443 -ssl3

これは次のようなものを生成するはずです

3073927320:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1258:SSL alert number 40
3073927320:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:

サーバーでSSLv3が無効になっていることを意味します。それ以外の場合、接続は正常に確立されます。

Nmap

または、サポートされているバージョンについてサーバーをスキャンするためにnmapを使用することができます。

# nmap --script ssl-enum-ciphers example.com
Starting Nmap 6.47 ( http://nmap.org ) at 2014-10-15 03:19 PDT
Nmap scan report for example.com (203.0.113.100)
Host is up (0.090s latency).
rDNS record for 203.0.113.100: Edge.example.com
Not shown: 997 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
| ssl-enum-ciphers: 
|   **SSLv3: No supported ciphers found**
|   TLSv1.0: 
157
P4cK3tHuNt3R

サイドノートでは、次のようにssl-enum-ciphersスクリプトでnmapを使用できます

nmap --script ssl-enum-ciphers -p 443 example.com

このような応答が返されます。

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers: 
|   SSLv3: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|     compressors: 
|       NULL
|   TLSv1.0: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|     compressors: 
|       NULL
|   TLSv1.1: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|     compressors: 
|       NULL
|   TLSv1.2: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|     compressors: 
|       NULL
|_  least strength: strong

ご覧のとおり、サポートされているすべてのバージョンのssl/tlsと暗号スイートがリストされています。

32

このテストは、SSLv3プロトコルが使用できるかどうかを確認するために作成しました。 CBC暗号が使用されていることを示す文字列を検索するためのより良い方法がおそらくありますが、ほとんどの人はSSLv3が使用可能かどうかを知りたいだけのようです。

注意すべきいくつかの事柄:

  • Mac OS Xのbash用に書かれているため、どこでも機能するかどうかはわかりません
  • Macはこれらのコアユーティリティについて奇妙なので、gtimeoutとタイムアウトを使用します。
  • allexternal.txtは、1行に1つのホスト名またはIPを含むファイルです

脚本:

for ip in `awk '{print $1}' < allexternal.txt`; do
    if gtimeout 30 openssl s_client -connect $ip:443 -ssl3 | grep -q 'Protocol  : SSLv3' ; then
        echo $ip SSLv3 detected >> sslv3output;
    else
        echo $ip SSLv3 NOT detected >> sslv3output;
    fi;
done
6

SSLv3だけが無効になっている場合は、openssl s_client TLSのみを使用するには:

openssl s_client -connect exmaple.com:443 -tls1
4

OpenSSLの-ssl3オプションは、コンパイル時に有効にする必要があることに注意してください。コンパイル済みのバイナリで実行している場合、このオプションは使用できない場合があります。この問題を参照してください: https://github.com/openssl/openssl/issues/6801

別のツールはtestssl.shです。これにより、プロトコル、暗号、選択された脆弱性がチェックされます: https://github.com/drwetter/testssl.sh

3
matttyg