特定のWebサイトが提供するSSL / TLS暗号スイートを一覧表示するにはどうすればよいですか?


261

特定のWebサイトが提供するSSL / TLS暗号スイートのリストを取得するにはどうすればよいですか?

私はopensslを試しましたが、出力を調べると:

$ echo -n | openssl s_client -connect www.google.com:443 
CONNECTED(00000003)
depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
   i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
 1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x
MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw
FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN
gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L
05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM
BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl
LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF
BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw
Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0
ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF
AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5
u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6
z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
---
No client certificate CA names sent
---
SSL handshake has read 1777 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 748E2B5FEFF9EA065DA2F04A06FBF456502F3E64DF1B4FF054F54817C473270C
    Session-ID-ctx: 
    Master-Key: C4284AE7D76421F782A822B3780FA9677A726A25E1258160CA30D346D65C5F4049DA3D10A41F3FA4816DD9606197FAE5
    Key-Arg   : None
    Start Time: 1266259321
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---

暗号スイートがAES256-SHAを使用していることを示しています。会話の16進ダンプを把握できることはわかっていますが、もう少しエレガントなものを望んでいました。

Linuxでこれを実行したいのですが、Windows(またはその他)で問題ありません。この質問は、私がPCIと一般的な侵入テストのために行うセキュリティテストに基づいています。

更新:

GregSは、SSLサーバーがクライアントの暗号スイートから選択することを以下に指摘します。したがって、すべての暗号スイートを一度に1つずつテストする必要があるようです。私は何かを一緒にハッキングできると思いますが、これを行うためのよりシンプルで、より将来性のある(たとえば新しい暗号)方法はありますか?


たぶんgnutls-cli
-grawity

タイトルが変更された後、この質問は実際にはソフトウェア録画を要求するものではありません。再開の投票。
ボブ

@ fixer1234あなたが幸せになれば、「ツール」という単語の出現を削除しました。中心的な質問は、とにかく特定のタスクを達成する方法を尋ねることです。それはささいな言い回しであり、より自由な「ソフトウェアのリスト」タイプの質問にはほど遠い。
ボブ

@ボブ:私はecとした。:-)再開の投票。
fixer1234

回答:


232

暗号スイートをテストするためのbashスクリプトを作成しました。サポートされている暗号スイートのリストをOpenSSLから取得し、それぞれを使用して接続を試みます。ハンドシェイクが成功すると、印刷しYESます。ハンドシェイクが成功しなかった場合、NOOpenSSLエラーテキストが後に続いて出力されます。

#!/usr/bin/env bash

# OpenSSL requires the port number.
SERVER=$1
DELAY=1
ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g')

echo Obtaining cipher list from $(openssl version).

for cipher in ${ciphers[@]}
do
echo -n Testing $cipher...
result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1)
if [[ "$result" =~ ":error:" ]] ; then
  error=$(echo -n $result | cut -d':' -f6)
  echo NO \($error\)
else
  if [[ "$result" =~ "Cipher is ${cipher}" || "$result" =~ "Cipher    :" ]] ; then
    echo YES
  else
    echo UNKNOWN RESPONSE
    echo $result
  fi
fi
sleep $DELAY
done

以下は、サポートされていない3つの暗号と、サポートされている1つの暗号を示すサンプル出力です。

[@linux ~]$ ./test_ciphers 192.168.1.11:443
Obtaining cipher list from OpenSSL 0.9.8k 25 Mar 2009.
Testing ADH-AES256-SHA...NO (sslv3 alert handshake failure)
Testing DHE-RSA-AES256-SHA...NO (sslv3 alert handshake failure)
Testing DHE-DSS-AES256-SHA...NO (sslv3 alert handshake failure)
Testing AES256-SHA...YES

編集:ホストとポートがスクリプトのパラメーターとして提供されるため、柔軟性を追加


7
openssl 1.0には変更が必要です。SSL2のテストと安全な再ネゴシエーションのif [[ "$result" =~ "Cipher :" ]] ; then代わりにif [[ "$result" =~ "Cipher is " ]] ; thenecho -n Testing ssl2... result=$(echo -n | openssl s_client -ssl2 -connect $SERVER 2>&1) if [[ "$result" =~ "Cipher :" ]] ; then echo supported. INSECURE! else echo no support, OK fi echo -n Testing SSL secure renegotiation... echo -n "" | openssl s_client -connect $SERVER 2>&1 | grep 'Secure Renegotiation'
Hubert

9
sslscanとopensslを使用する別の非常に洗練されたシェルスクリプトがあります。TLSSLed
Robert


1
サーバーがOpenSSLがサポートしていない暗号スイートをサポートしているかどうか、このスクリプトではおそらく通知されないことに注意してください。
サンパブロクパー

2
TLSSLedに対する@Robertからの提案は素晴らしいものでした。1.3に更新され、さらに多くの機能を備えています。私はセキュリティテストに使ってきましたが、感銘を受けたと言わなければなりません。
ジョン・イヤーリー

162

ssl-enum- ciphers使用したNmap

ネットワークサービスから利用可能な暗号のリストを取得するためのより良いまたはより速い方法はありません。さらに、nmapは、利用可能な暗号ごとに、強、弱、または不明の強度評価を提供します。

最初に、ssl-enum-ciphers.nse nmapスクリプトをダウンロードします説明はこちら)。次に、スクリプトと同じディレクトリから、次のようにnmapを実行します。

HTTPサーバーでサポートされている暗号をリストする

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

IMAPサーバーでサポートされている暗号を一覧表示する

$ nmap --script ssl-enum-ciphers -p 993 mail.example.com

Dovecot IMAPサーバーからの出力のスニペットは次のとおりです。

993/tcp open  imaps
| ssl-enum-ciphers:
|   SSLv3:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_IDEA_CBC_SHA - weak
...
|   TLSv1.0:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_IDEA_CBC_SHA - weak
...
|_  least strength: weak

Nmap done: 1 IP address (1 host up) scanned in 1.03 seconds

2
STARTTLSを使用してIMAPでこのスクリプトを使用する方法はありますか?SMTPでのSTARTTLSは機能しているように見えますが、IMAPではスクリプトは実行されていないようです。
ギール14

いくつかの点:ダウンロードしたスクリプトではなく、nmapディストリビューションでスクリプトを実行している可能性があります。名前を変更して確認してください。次に、一部のバージョンで一般的に使用されるポート番号をチェックする「ポートルール」をチェックします。置換portrule = function() \n return true \n end
スリム

...そして、IMAP STARTTLS、FTPS AUTH TLSなどを使用するにはハッキングが必要になりますが、可能です。
スリム

1
1つの注意点は、ディストリビューション/パッケージに含まれている可能性のある古いスクリプトは、サーバー(またはクライアント)の優先順ではなく、アルファベット順で暗号をリストするということです。@slimからの上記のコメントを参照してください
クリントPachl

3
この回答が書かれてから2年間で、NmapはFTP、NNTP、IMAP、LDAP、POP3、PostgreSQL、SMTP、XMPP、VNC、MS SQLを介したSTARTTLSのサポートを追加しました。 。
盆栽バイキング

104

特定のWebサイトが提供するSSL / TLS暗号スイートをテストできるツールはありますか?

はい、SSL LabsのWebサイトでオンラインツールを使用して、パブリックSSLサーバーデータベースを照会できます。

これが提供する情報の断片です。

代替テキスト

(google.comの結果のスクリーンショット)


これはまさに私が探していたものです!どうもありがとう!
ジェレミーパウエル

11
残念ながら、それだけでHTTPS標準ポートで、TLSとPOP3S、IMAPSまたはIMAPをチェックするためにそれを使用することはできませんサポートしていない
ヒューバートKario

1
また、HTTPSのみをサポートしていますが、SNIもサポートしていません。
グルケンパプスト

12
また、公開サイトには適していますが、インターネットから隔離されたネットワーク上のサイトには使用できません。
イッツィ

53

sslscanは素敵な小さなユーティリティです。

TLSおよびSSLとの接続をテストし(ビルドスクリプトはOpenSSLの独自のコピーとリンクできるため、古いSSLバージョンもチェックされます)、サーバーの暗号スイートと証明書についてレポートします。

出力例google.com(読みやすくするために省略):

$ sslscan google.com
Testing SSL server google.com on port 443

 TLS renegotiation:
Secure session renegotiation supported

  TLS Compression:
Compression disabled

  Heartbleed:
TLS 1.2 not vulnerable to heartbleed
TLS 1.1 not vulnerable to heartbleed
TLS 1.0 not vulnerable to heartbleed

  Supported Server Cipher(s):
Preferred TLSv1.2  128 bits  ECDHE-RSA-AES128-GCM-SHA256   Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  ECDHE-RSA-RC4-SHA             Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  AES128-GCM-SHA256
Accepted  TLSv1.2  128 bits  AES128-SHA
<snip>
Preferred TLSv1.1  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.1  128 bits  ECDHE-RSA-RC4-SHA             Curve P-256 DHE 256
Accepted  TLSv1.1  128 bits  AES128-SHA
<snip>
Preferred TLSv1.0  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.0  128 bits  ECDHE-RSA-RC4-SHA             Curve P-256 DHE 256
Accepted  TLSv1.0  128 bits  AES128-SHA
<snip>
Preferred SSLv3    128 bits  RC4-SHA
Accepted  SSLv3    128 bits  RC4-MD5
<snip>

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  *.google.com
Altnames: DNS:*.google.com, DNS:*.android.com, <snip>
Issuer:   Google Internet Authority G2

Not valid before: Apr  7 08:24:31 2016 GMT
Not valid after:  Jun 30 08:20:00 2016 GMT

1
yum install sslscanCentOSの6上の作品
コーダー

1
sudo dnf install sslscanFedora 22でも同様です。
ゼインSハルソール

2
brew install sslscanOSXで
Xiao

sudo apt-get install sslscanUbuntu(12.04 –以降のバージョンはすべて問題ないはずです)。
バル

3
更新:DebianおよびUbuntuリポジトリにあるsslscanの公式バージョン(現在2009年の1.8.2) TLS v1.1および1.2をサポートしていないことに注意してください。bugs.launchpad.net/ ubuntu / + source / sslscanを参照してください/ + bug / 1372741。したがって、OPがリンクしているGitHub上のバージョンを使用する必要があります。
バル

15

これはSSLスキャンツールの非常に優れた参照スレッドであるため、1年前に作成されたCipherScanをリストし、鍵交換暗号の問題を特定することもできます。 https://github.com/jvehent/cipherscan

SNIとFreeBSDをサポートする私のフォークが必要な場合、URLは https://github.com/oparoz/cipherscanです

これopenssl s_clientは、独自のOpenSSLバイナリを呼び出してサポートするスクリプトであり、今後の機能や新しい暗号(例ごとにchacha20 + poly1305)をテストできます。

また、任意のポートに接続して、starttlssを使用できます。

これが典型的な出力です

# ./cipherscan -o ./openssl api.mycompany.com:443
...................
prio  ciphersuite                  protocols              pfs_keysize
1     DHE-RSA-AES256-GCM-SHA384    TLSv1.2                DH,4096bits
2     DHE-RSA-AES256-SHA256        TLSv1.2                DH,4096bits
3     ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                ECDH,P-384,384bits
4     ECDHE-RSA-AES256-SHA384      TLSv1.2                ECDH,P-384,384bits
5     DHE-RSA-AES128-GCM-SHA256    TLSv1.2                DH,4096bits
6     DHE-RSA-AES128-SHA256        TLSv1.2                DH,4096bits
7     ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                ECDH,P-384,384bits
8     ECDHE-RSA-AES128-SHA256      TLSv1.2                ECDH,P-384,384bits
9     DHE-RSA-CAMELLIA256-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
10    DHE-RSA-AES256-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
11    ECDHE-RSA-AES256-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-384,384bits
12    DHE-RSA-CAMELLIA128-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
13    DHE-RSA-AES128-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
14    ECDHE-RSA-AES128-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-384,384bits
15    CAMELLIA256-SHA              TLSv1,TLSv1.1,TLSv1.2
16    AES256-SHA                   TLSv1,TLSv1.1,TLSv1.2
17    CAMELLIA128-SHA              TLSv1,TLSv1.1,TLSv1.2
18    AES128-SHA                   TLSv1,TLSv1.1,TLSv1.2

Certificate: trusted, 4096 bit, sha256WithRSAEncryption signature
TLS ticket lifetime hint: 300
OCSP stapling: supported

そして、ここにオプションのリストがあります

-a | --allciphers   Test all known ciphers individually at the end.
-b | --benchmark    Activate benchmark mode.
-d | --delay        Pause for n seconds between connections
-D | --debug        Output ALL the information.
-h | --help         Shows this help text.
-j | --json         Output results in JSON format.
-o | --openssl      path/to/your/openssl binary you want to use.
-v | --verbose      Increase verbosity.

json出力は、他のスクリプトからこれを呼び出す場合に役立ちます。


「big-SSLv3構成はサポートされていません、接続に失敗しました」
コーダー


8

少しグーグルで調べた後、このSSL-TLSのテスト(OWASP-CM-001)を見つけました。

nmapのスキャナは、「-sV」スキャンオプションを使用して、SSLサービスを識別することが可能です。脆弱性スキャナーには、サービス検出の実行に加えて、弱い暗号に対するチェックが含まれる場合があります(たとえば、Nessusスキャナーには、任意のポートでSSLサービスをチェックする機能があり、弱い暗号を報告します)。

また、Foundstone SSL Diggerは、サポートされている暗号をテストしてSSLサーバーの強度を評価するツールです。これらの暗号の一部は安全でないことが知られています。



2

SSLScanは素晴らしいです。新しいツールSSLDiagnosはWindowsで機能しますが、openssl s_clientを使用してスクリプトを記述することもできます。



2

適切なgrepable出力(およびすべてのSSL / TLSバージョンのチェックのサポート)が必要な場合

使用法:./script.sh www.url.com

#!/usr/bin/env bash
ciphers2=$(openssl ciphers -ssl2 'ALL:eNULL' | sed -e 's/:/ /g')
ciphers3=$(openssl ciphers -ssl3 'ALL:eNULL' | sed -e 's/:/ /g')
cipherst1=$(openssl ciphers -tls1 'ALL:eNULL' | sed -e 's/:/ /g')
cipherst11=$(openssl ciphers -tls1.1 'ALL:eNULL' | sed -e 's/:/ /g')
cipherst12=$(openssl ciphers -tls1.2 'ALL:eNULL' | sed -e 's/:/ /g')

SSL2="SSL2("
for cipher in ${ciphers2[@]}
do
result=$(echo -n | openssl s_client -ssl2 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  SSL2="${SSL2}${cipher}:"
fi
done
SSL2=$(echo "${SSL2})" | sed -e 's/:)/)/g')

SSL3="SSL3("
for cipher in ${ciphers3[@]}
do
result=$(echo -n | openssl s_client -ssl3 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  SSL3="${SSL3}${cipher}:"
fi
done
SSL3=$(echo "${SSL3})" | sed -e 's/:)/)/g')
TLS1="TLS1("
for cipher in ${cipherst1[@]}
do
result=$(echo -n | openssl s_client -tls1 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  TLS1="${TLS1}${cipher}:"
fi
done
TLS1=$(echo "${TLS1})" | sed -e 's/:)/)/g')

TLS11="TLS1.1("
for cipher in ${cipherst11[@]}
do
result=$(echo -n | openssl s_client -tls1_1 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  TLS11="${TLS11}${cipher}:"
fi
done
TLS11=$(echo "${TLS11})" | sed -e 's/:)/)/g')

TLS12="TLS1.2("
for cipher in ${cipherst12[@]}
do
result=$(echo -n | openssl s_client -tls1_2 -cipher "$cipher" -connect $1:443 2>&1)
if [[ "$result" =~ "Cipher is ${cipher}" ]] ; then
  TLS12="${TLS12}${cipher}:"
fi
done
TLS12=$(echo "${TLS12})" | sed -e 's/:)/)/g')

echo "$1,$SSL2,$SSL3,$TLS1,$TLS11,$TLS12";

あなたは実行していますがopenssl ciphers -tls1.1openssl ciphers -tls1.2それらのパラメータは存在しないようです... -tls1(少なくとも私が試したプラットフォームでは)しかありません。
マルキ

(の形で追加のオプションがあるように思われるtls1_1tls1_2、彼らは唯一の上に示されているマスターバージョンのOpenSSLともない1.0.2で ....)
Marki

サーバーがOpenSSLがサポートしていない暗号スイートをサポートしているかどうか、このスクリプトではおそらく通知されないことに注意してください。
サンパブロクパー

2

pentesterscripting.comには、SSLScanとOpenSSLの両方を利用して以下をチェックする素敵なスクリプトがあります。

  • SSL v2;
  • 週間暗号スーツ。
  • MD5; そして
  • TLS再ネゴシエーションの脆弱性

http://www.pentesterscripting.com/discovery/ssl_tests(Internet Archive Wayback Machine経由)

メインサイトが現在デッドであるため、ここで将来の使用のために複製します。

#!/usr/bin/env bash

# Description:
#       Script to extract the most security relevant details from a 
#       target SSL/TLS implementation by using sslscan.
# Author:  Raul Siles (raul _AT_ taddong _DOT_ com)
#          Taddong (www.taddong.com)
# Date:    2011-05-27
# Version: 1.0
#
# - Current SSL/TLS tests: 
#   SSLv2, NULL cipher, weak ciphers -key length-, strong 
#   ciphers -AES-, MD5 signed cert, SSL/TLS renegotiation
#
# Requires: 
# - sslscan
# https://sourceforge.net/projects/sslscan/
#
# Credits: Based on ssl_test.sh by Aung Khant, http://yehg.net.
# 

#
# /**************************************************************************
# *   Copyright 2011 by Taddong (Raul Siles)                                *
# *                                                                         *
# *   This program is free software; you can redistribute it and/or modify  *
# *   it under the terms of the GNU General Public License as published by  *
# *   the Free Software Foundation; either version 3 of the License, or     *
# *   (at your option) any later version.                                   *
# *                                                                         *
# *   This program is distributed in the hope that it will be useful,       *
# *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
# *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
# *   GNU General Public License for more details.                          *
# *                                                                         *
# *   You should have received a copy of the GNU General Public License     *
# *   along with this program. If not, see <http://www.gnu.org/licenses/>.  *
# *                                                                         *
# **************************************************************************/
#

VERSION=1.0

OPENSSLVERSION=$(openssl version)
SSLSCANVERSION=$(sslscan --version | grep version | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")

echo ------------------------------------------------------
echo " TLSSLed - ($VERSION) based on sslscan and openssl"
echo " by Raul Siles (www.taddong.com)"
echo " ( inspired by ssl_test.sh by Aung Khant )"
echo ------------------------------------------------------
echo + openssl version: $OPENSSLVERSION
echo + $SSLSCANVERSION
echo ------------------------------------------------------
echo

if [ $# -ne 2 ]; then 
   echo Usage: $0 IP PORT
   exit
fi

HOST=$1
PORT=$2

echo  [*] Analyzing SSL/TLS on $HOST:$PORT ...
echo 

# Run sslcan once, store the results to a log file and
# analyze that file for all the different tests:
DATE=$(date +%F_%R:%S)
TARGET=$HOST:$PORT
LOGFILE=sslscan\_$TARGET\_$DATE.log
ERRFILE=sslscan\_$TARGET\_$DATE.err

echo [*] Running sslscan on $HOST:$PORT...
sslscan $HOST:$PORT > $LOGFILE 2> $ERRFILE

echo
echo [*] Testing for SSLv2 ...
cat $LOGFILE | grep "Accepted  SSLv2"
echo
echo [*] Testing for NULL cipher ...
cat $LOGFILE | grep "NULL" | grep Accepted
echo
echo [*] Testing for weak ciphers \(based on key length\) ...
cat $LOGFILE | grep " 40 bits" | grep Accepted
echo 
cat $LOGFILE | grep " 56 bits" | grep Accepted
echo
echo [*] Testing for strong ciphers \(AES\) ...
cat $LOGFILE | grep "AES" | grep Accepted

echo 
echo [*] Testing for MD5 signed certificate ...
#cat $LOGFILE | grep -E 'MD5WithRSAEncryption|md5WithRSAEncryption'
cat $LOGFILE | grep -i 'MD5WithRSAEncryption'

echo 
echo [*] Checking preferred server ciphers ...
cat $LOGFILE | sed '/Prefered Server Cipher(s):/,/^$/!d' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

echo
echo [*] Testing for SSLv3/TLSv1 renegotiation vuln. \(CVE-2009-3555\) ...
#echo [*] echo R \| openssl s_client -connect $HOST:$PORT \| grep "DONE"
#
# Renegotiation details go to stderr (2>)
#
# if $OPENSSLVERSION is updated (version?) it supports RFC5746 and will print:
# Secure Renegotiation IS NOT supported
# Secure Renegotiation IS supported
#

echo R | openssl s_client -connect $HOST:$PORT | grep -E "Secure Renegotiation IS|DONE"

echo
echo [*] New files created:
ls -l $LOGFILE
if [ ! -s $ERRFILE ]; then
        # Error file is empty
        rm $ERRFILE
else
        ls -l $ERRFILE
fi

echo
echo 
echo [*] done
echo

使用法:./ssltest.shホストポート


2

@indivの回答と、それを独自の回答として投稿する提案に基づいて、@ indivのスクリプトの調整版を提供しています。最初の引数としてホストを指定すると、元のスクリプトと同じ結果が出力されますが、もう少しフォーマットされます。

#!/usr/bin/env bash
# adapted from https://superuser.com/questions/109213/how-do-i-list-the-ssl-tls-cipher-suites-a-particular-website-offers

# OpenSSL requires the port number.
# SERVER=192.168.1.1:443
SERVER=$1
if [[ -z "$SERVER" ]]; then echo "ERROR: no server specified"; exit 1; fi;

## Set up colors, if possible
if [[ $(tput colors) ]];then
  COLOR_BOLD="$(tput bold)"     # "\e[1;32m"
  COLOR_GREEN="$(tput setaf 2)" # "\e[1;32m"
  COLOR_RESET="$(tput sgr0)"    # "\e[0m"
fi


SERVER=$1:443
echo Server is ${COLOR_BOLD}"$SERVER"${COLOR_RESET}

DELAY=1
ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g')

echo Obtaining cipher list from $(openssl version).

for cipher in ${ciphers[@]}
  do
  printf "%-42s" "Testing $cipher... "
  result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1)
  if [[ "$result" =~ ":error:" ]] ; then
    error=$(echo -n $result | cut -d':' -f6)
    echo NO \($error\)
  else
    if [[ "$result" =~ "Cipher is ${cipher}" || "$result" =~ "Cipher    :" ]] ; then
      echo ${COLOR_BOLD}${COLOR_GREEN}YES${COLOR_RESET}
    else
      echo UNKNOWN RESPONSE
      echo $result
    fi
  fi
  sleep $DELAY
done

2

(無料)OpenSSL CookbookKezの回答に記載されているSSL Labsオンラインツールを開発したIvanRistićによるは次のように述べています。

特定のサーバーでサポートされているすべてのスイートを判別する場合は、起動して開始します openssl ciphers ALLサポートされているすべてのスイートを確認する場合は、OpenSSLのバージョンでサポートされているすべてのスイートのリストを取得するからます。次に、それらを1つずつサーバーに送信して、個別にテストします。これを手動で行うことはお勧めしません。これは、小さな自動化が大いに役立つ状況です。実際、これは良いツール探すのが適切な状況です

ただし、この方法をテストすることには欠点があります。OpenSSLがサポートするスイートのみをテストできます。...

すべての暗号スイートをサポートする単一のSSL / TLSライブラリはないため、包括的なテストが困難になります。SSL Labsの場合、この目的のために部分的なハンドシェイクを使用し、任意のスイートをサポートするふりをするカスタムクライアントを使用しました。。実際には、1つのスイートでもネゴシエートできませんが、ネゴシエートすることを提案するだけで、サーバーがスイートをサポートしているかどうかを通知できます。この方法ですべてのスイートをテストできるだけでなく、非常に効率的にテストすることもできます。

(私の強調。)

他の回答で言及されていないツールの1つは、Stephen BradshawのSSLTestです。。これは、とりわけ、「検出された暗号とプロトコルをDSD ISMやPCI-DSSなどのコンプライアンス標準と比較する」ことを目的としています。

したがって、これまたは他の回答で言及されているツールのいずれかを試すか、独自のツールを作成して、Ristićの部分的なハンドシェイクのアプローチの使用を検討してください。


1

これを正確に行うツールを作成しました。これはtlsenumと呼ばれ、GitHubで入手できます

[ayrx@division tlsenum]$ ./tlsenum.py twitter.com 443
TLS Versions supported by server: 3.0, 1.0, 1.1, 1.2
Supported Cipher suites in order of priority:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA

に対するツールの出力例を次に示しますtwitter.com

SSL Labの機能と似ていますが、自動化および解析できるコマンドラインツールを使用する方がはるかに便利であることがわかりました。


1

元々https://github.com/iSECPartners/sslyzeにあった SSLyzeは、現在https://github.com/nabla-c0d3/sslyzeにあります。それは別の回答で言及されましたが、詳細はありません。

SSLyzeはPythonベースであり、コマンドラインからLinux / Mac / Windowsで動作します。OpenSSLを使用し、Windowsでは、OpenSSLのバンドルコピーが付属しています。

プロトコル、暗号スイート、およびキーの詳細、さらにいくつかの一般的な脆弱性のテストをリストします。特定のチェックを有効または無効にして、より多くのデータを取得したり、スキャンを高速化することができます。


0

あなたができる唯一のことは、それらすべてを一度に一つずつ試して、どれが受け入れられるかを見ることです。私はこれを行うツールを知りませんが、スクリプトツールとopenssl s_client

クライアントはどの暗号スイートを受け入れるかをアドバタイズしますが、サーバーは単純に1つを選択して使用するか、必要なものが見つからない場合は接続に失敗します。


そうそう...何らかの理由で、私はそれが逆のことだと思っていました。たぶん、事前に石畳のツールを見つけることができます... :)
ジェレミーパウエル

0

それらの答えはすべて大丈夫です。答えの一部は、なぜサーバーのリストを発見するツールが必要なのかを説明し、TLSクライアントがサーバーに接続するときにTLSクライアントが行うように、そのサーバーがサポートするすべての暗号スイートを提供することをTLSで直接要求しない理由を説明できます。

答えは、サーバーはリストを送信せず、クライアント暗号リストで使用したい暗号を選択するだけです。これがSSL / TLSプロトコルの記述方法です:http : //wiki.opensslfoundation.com/index.php/ SSL_and_TLS_Protocols#Cipher_Suites

そのため、クライアントは、サーバーでサポートされているものを見つけるために暗号を列挙し、そのために各暗号スイートに対して少なくとも1つの新しい開始ハンドシェイク(ClientHello)を行う必要があります。


0

AUTH TLSFTPで機能するものを探しているときに、このツールを発見しました:ssl-cipher-suite-enum

これは、基本的にhackajarのシェルスクリプトが行うことを行うperlスクリプトであり、より洗練されたものです。

また、提供される暗号とプロトコルの基本的な評価も提供します。SSL Labsのツールに似ており、家庭での使用のみを目的としています。:)

デフォルトではAUTH SSL、FTP でのみサポートされていますが、単純な検索と置換で修正できます。おまけとして、SMTP with STARTTLSおよびRDPのサポートも主張しています。


0

TestSSLServerは、純粋にJavaベースのソリューションです。利点:

  • 非常に低レベルで動作し、プレーンソケットでのみ動作するため、JDKまたはOpenSSLから利用できない暗号に依存しません。

  • 追加のポート(pingのICMPなど)を開く必要はありません。

  • 存在するクライアント証明書で動作しています

短所:

  • 2016年の時点では、暗号のリストは古くなっている可能性があります(これを判断する専門家はここにはいませんが)

私の個人的な経験:HTTPSポートが1つしか開いていない(他のポートがない)緊密なサーバーを使用し、クライアント証明書が必要で、iptablesがアクティブである場合、利用可能な暗号を一覧表示できましたが、トップ投票ソリューションは表示されませんでした(私は小さなシェルスクリプト、SSL Labs、NMap、sslscanを試す)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.