セキュリティ – 特定のウェブサイトが提供している SSL/TLS 暗号化スイートをリストアップするには?

security ssl tls

特定のウェブサイトが提供している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進数ダンプを grep することができることを知っていますが、 もう少しエレガントなものを期待していました

Linuxでやりたいのですが、Windows(またはその他)でも良いと思います。この質問は、私がPCIや一般的なペネトレーションテストのためのセキュリティテストを行っていることが動機です

Update:

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

  300  Jeremy Powell  2010-02-15


ベストアンサー

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

#!/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

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

261  indiv  2010-12-20


Nmapssl-enum-ciphers を指定します

ネットワークサービスから利用可能な暗号のリストを取得するには、これ以上に高速な方法はありません。さらに、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

198  Clint Pachl  2014-06-05


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

はい、SSL Labs‘ ウェブサイト上のオンラインツールを使用して、公開SSLサーバデータベースを照会することができます

ここでは、それが提供する情報のスニペットをご紹介します

alt text

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

112  Kez  2010-02-20


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

62  indiv  2010-03-18


これだけ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出力は、他のスクリプトからこれを呼び出す場合に便利です

16  Olivier – interfaSys  2014-09-16


GitHub - iSECPartners/sslyze: Current development of SSLyze now takes place on a separate repository
Current development of SSLyze now takes place on a separate repository - iSECPartners/sslyze

これはPythonベースで、Linux/Mac/Windowsでコマンドラインから動作します

13  Scott  2012-01-25


少しググった後、私はこのSSL-TLS (OWASP-CM-001)のテストを見つけました

nmap スキャナは、”-sV “スキャンオプションを介して、SSLサービスを識別することができます。脆弱性スキャナは、サービスの発見を行うことに加えて、脆弱な暗号をチェックする機能を持っています (例えば、Nessus スキャナ は、任意のポートで SSL サービスをチェックする機能を持っており、脆弱な暗号を報告してくれます)

とも記載されています。Foundstone SSL Diggerは、サポートされている暗号をテストすることでSSLサーバーの強度を評価するツールです。これらの暗号化方式の中には、安全でないことが知られているものもあります

8  fluxtendu  2010-02-20


私は SSL テスト testssl.sh (https://testssl.sh / devel バージョン @ https://github.com/drwetter/testssl.sh を参照してください) のほとんどのために使用しています。脆弱性、暗号、プロトコルなどをテストします

6  Dirk  2015-01-10


この答えは、最高に与えられた答えのソファーを要約し、代替案を選ぶ理由を論じています(またはそうではない!)


最適な解決策を見つけるためには、まず「なぜサポートされているすべての暗号を列挙したいのか」に答えるべきです。ここでは、セキュリティの面、すなわち、サーバが脆弱かどうかを調べることに焦点が当てられます。次に答えなければならないのは、出力が機械で読めるようにすべきかどうか、例えばスクリプトでさらに使用できるようにすべきかどうか、ということです

1.testssl.sh

testssl.sh の最も重要な利点は、脆弱性テスト用に調整されたバイナリのセットを使用していることかもしれません (開発者の説明は こちら を参照してください)

2.cipherscan

  • CLI (python)
  • No TLSv1.3
  • Self-contained
  • 限定的な暗号スイート(ハードコード)
  • 機械読み取り可能な結果(JSON)を生成します
  • Fast

3.nmap ssl-enum-ciphers

  • CLI (nmap スクリプト)
  • No TLSv1.3
  • Self-contained
  • 限定的な暗号スイート(ハードコード)
  • 既知の脆弱性をチェックします
  • 機械で読めるような結果はありません

利用可能なツールの包括的な概要については、sslLabs 評価ツールを参照してください

4  Yan Foto  2020-02-11


SSLScanは素晴らしいです。SSLDiagnosはWindowsでも動作しますし、openssl s_clientを使ってスクリプトを書くこともできます

2  Dwayne  2010-12-01


Nmapのssl-enum-ciphersスクリプトは、サポートされている暗号化方式とSSL/TLSのバージョン、およびサポートされているコンプレッサをリストアップすることができる

2  bonsaiviking  2014-03-25


もしあなたが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";

2  hackajar  2014-04-09


pentesterscripting.comには、SSLScanとOpenSSLの両方を利用してチェックするための小さなスクリプトがあります

  • SSL v2;
  • ウィークサイファースーツ
  • MD5; and
  • TLS リネゴシエーションの脆弱性

http://www.pentesterscripting.com/discovery/ssl_tests (via Internet Archive ウェイバックマシン)

メインサイトが死んでしまったので、将来のためにここに複製します

#!/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 HOST PORT

2  Pi3cH  2012-01-19


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  insaner  2016-02-05


OpenSSL Cookbookには、Kezの回答に記載されているSSL Labsのオンラインツールを開発したIvan Ristić氏による(無料)と記載されています

特定のサーバでサポートされているすべてのスイートを調べたい場合は、 openssl ciphers ALL を実行して、あなたのバージョンの OpenSSL でサポートされているすべてのスイートのリストを取得してください。そして、それらを一つずつサーバに提出して、個別にテストしてください。これは手動で行うことを提案しているのではありません。実際、これは良いツールを探すのに適した状況かもしれません

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

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

(My emphasis.)

他の回答で言及されているのを見たことがないのは、Stephen Bradshaw氏のSSLTestで、これは特に「検出された暗号やプロトコルをDSD ISMやPCI-DSSなどのコンプライアンス基準と比較する」ことを目的としています

そのため、これや他の回答で述べたツールを試してみるか、自分で作ってみて、部分的な握手というRistićのアプローチを使うことを検討してみてください

2  sampablokuper  2016-09-19


これを正確に行うツールを書きました。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  Ayrx  2014-05-25


SSLyze は元々 https://github.com/iSECPartners/sslyze にありましたが、現在は https://github.com/nabla-c0d3/sslyze にあります。another answerでも言及されていましたが、あまり詳しくは書かれていません

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

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

1  CBHacking  2015-09-26


あなたにできる唯一のことは、一度に全部試してみて、どれが受け入れられるかを確認することです。私はこれを行うツールを知らないのですが、スクリプトツールとopenssl s_clientを組み合わせて作るのは難しくないはずです

クライアントはどのサイファースイートを受け入れるかを宣伝しますが、サーバは単にそれを選んで使うか、気に入ったものが見つからない場合は接続に失敗します

0  President James K. Polk  2010-02-15


これらの答えはすべて問題ありません。その答えの一部は、TLS クライアントがサーバに接続するときにサーバがサポートしているすべての暗号スイートを提供するのと同じように、サーバのリストを発見するためのツールが必要な理由を説明することができます

答えは、サーバがリストを送信することはなく、クライアントの暗号リストから使用したい暗号を選択するだけで、これがSSL/TLSプロトコルの書き方です

そのため、クライアントはサーバがサポートしている暗号を見つけられるように暗号を列挙しなければならず、そのためには各暗号スイートに対して少なくとも一つの新規開始ハンドシェイク (ClientHello) を行わなければなりません

0  philippe lhardy  2014-11-04


FTPでAUTH TLSをしてくれるものを探していたら、こんなツールを発見しました。ssl-cipher-suite-enum です

これは基本的に hackajar のシェルスクリプトと同じことをする perl スクリプトで、より洗練されたものになっています

また、提供されている暗号やプロトコルの基本的な評価もできます。家庭用のSSL Labsツールに似ています。)

デフォルトではFTPのAUTH SSLのみをサポートしていますが、簡単な検索と置換で修正できます。ボーナスとして、STARTTLSとRDPでSMTPをサポートしていると主張しています

0  Daniel B  2014-12-20


TestSSLServer は純粋に Java ベースのソリューションです。利点があります

  • これは非常に低レベルで、プレーンなソケットで動作しているので、JDK や OpenSSL から利用できない可能性のある暗号には依存しません

  • は、(ping用のICMPのように)追加のポートを開く必要はありません

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

Disadvantages:

  • 2016年の時点では、サイファーのリストは時代遅れかもしれません(ここで判断する専門家ではありませんが)

私の個人的な経験: HTTPSポートが一つだけ開いていて(他のポートは開いていない)、クライアント証明書が必要でiptablesがアクティブな状態で、タイトに配置されたサーバでは、利用可能な暗号化方式をリストアップすることができましたが、トップバウトのソリューションではリストアップできませんでした(私は小さなシェルスクリプト、SSL Labs、NMap、sslscanを試していました)

0  mstrap  2016-03-02


タイトルとURLをコピーしました