特定の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サーバーがクライアントの暗号スイートから選ぶことを以下に指摘します。だから私は一度に一つずつすべての暗号スイートをテストする必要があるだろうようです。私は何かを一緒にハッキングすることができると思いますが、これを行うためのより単純でより将来性のある(例えば新しい暗号)方法はありますか?
暗号スイートをテストするための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
編集:ホストとポートがスクリプトへのパラメータとして提供されるように柔軟性を追加
ネットワークサービスから利用可能な暗号のリストを取得するためのより良いまたはより速い方法はありません。さらに、nmapを使用すると、利用可能な暗号ごとに強度、弱い、または不明の強度評価が得られます。
まず、 ssl-enum-ciphers.nse nmapスクリプトをダウンロードしてください( 説明はこちら )。次に、スクリプトと同じディレクトリから、nmapを次のように実行します。
$ nmap --script ssl-enum-ciphers -p 443 www.example.com
$ 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
特定のWebサイトが提供するSSL/TLS暗号スイートをテストできるツールはありますか?
はい、あなたは SSL Labs のWebサイト上のオンラインツールを使用して、公開SSLサーバーデータベースを照会することができます。 。
これが提供する情報の断片です。
(google.comの結果からのスクリーンショット)
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
これは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出力は役に立ちます。
https://github.com/iSECPartners/sslyze
これはPythonベースで、Linux/Mac/Windowsでコマンドラインから動きます。
少しグーグルした後、私はこれを発見しました SSL-TLS(OWASP-CM-001)のテスト :
「 - sV」スキャンオプションを使用した nmap スキャナは、SSLサービスを識別できます。脆弱性スキャナーは、サービス発見を実行することに加えて、弱い暗号に対するチェックを含むかもしれません(例えば、 Nessusスキャナー は任意のSSLサービスをチェックする能力を持っています弱い暗号を報告します)。
また、 Foundstone SSL Digger は、サポートされている暗号をテストしてSSLサーバーの強度を評価するためのツールです。これらの暗号のいくつかは安全でないことが知られています。
私はほとんどのSSLテストtestssl.shを使っています( https://testssl.sh / devel version @ https://github.com/drwetter/を参照)。 testssl.sh 。脆弱性、暗号、プロトコルなどをテストします。
Nmapの ssl-enum-ciphers スクリプトは、サポートされている暗号とSSL/TLSのバージョン、およびサポートされているコンプレッサを一覧表示できます。
@ indivの 答え とそれを自分自身の答えとして投稿するという提案に基づいて、私は@ indivのスクリプトの調整版を提供しています。最初の引数としてHostを指定すると、元のスクリプトと同じ結果が出力されますが、もう少しフォーマットされています。
#!/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
Kez's answer に記載されているSSL Labsオンラインツールを開発したIvanRistićによる(無料) OpenSSL Cookbook は、次のように述べています。
特定のサーバでサポートされているすべてのスイートを確認したい場合は、
openssl ciphers ALL
を呼び出して、使用しているバージョンのOpenSSLでサポートされているすべてのスイートのリストを取得してください。その後、それらを1つずつサーバーに送信して個別にテストします。私はあなたがこれを手動ですることを提案していません。これは、少し自動化することが大いに役立つ状況です。実際、これは良いツールを探すのが適切かもしれない状況です。ただし、この方法でテストすることには欠点があります。 OpenSSLがサポートするスイートのみをテストできます。 ...
すべての暗号スイートをサポートする単一のSSL/TLSライブラリがないため、包括的なテストが困難になります。 SSL Labsでは、私はこの目的のために部分的なハンドシェイクを使い、任意のスイートをサポートするふりをするカスタムクライアントを使いました。実際には単一のスイートでさえ交渉することはできませんが、交渉することを提案するだけで、サーバがスイートをサポートしているかどうかを判断するのに十分です。この方法ですべてのスイートをテストできるだけでなく、非常に効率的に実行できます。
(私の強調)
私が他の答えで言及したのを見たことがない1つのツールはDSD ISMのようなコンプライアンス規格に対して特に検出された暗号とプロトコルを比較することを意図しているスティーブンブラッドショーの SSLTest ですPCI-DSS」
それで、これか他の答えで言及されたツールのうちの1つを試みるか、あるいはあなた自身で構築して、そして部分的な握手のRistićのアプローチを使うことを考えなさい。
SSLScanとOpenSSLの両方を利用して、以下のことを確認します。pentesterscripting.comにNiceという小さなスクリプトがあります。
http://www.pentesterscripting.com/discovery/ssl_tests (インターネットアーカイブ経由 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 Host PORT
もしあなたがNice grepable出力が欲しいなら(そして全てのSSL/TLSバージョンをチェックするためのサポート)
#!/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";
SSLScanは素晴らしいです。新しいツール SSLDiagnos はWindowsで動作します。あるいは、openssl s_clientを使用してスクリプトを書くこともできます。
私はまさにこれを行うツールを書きました。これは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ラボが行っていることと似ていますが、自動化して解析できるコマンドラインツールがあるとはるかに便利です。
TestSSLServer は純粋にJavaベースのソリューションです。利点:
それはプレーンソケット上で非常に低レベルで動作しているので、それはindependentJDKまたはOpenSSLのから利用できます。
追加のポート(ping用のICMPなど)を開く必要はありません。
現在のクライアント証明書を使用しています
デメリット:
私の個人的な経験:1つだけHTTPSポートが開いていて(他のポートはありません)、クライアント証明書が必要でiptablesがアクティブなタイトレースサーバーを考えれば、利用可能な暗号を一覧表示できました。小さなシェルスクリプトを試す、SSL Labs、NMap、sslscan)
SSLyzeは、もともと https://github.com/iSECPartners/sslyze にあり、現在は https://にあります。 github.com/nabla-c0d3/sslyze それは 他の答え で述べられていましたが、詳細は述べられていません。
SSLyzeはPythonベースで、コマンドラインからLinux/Mac/Windows上で動作します。これはOpenSSLを使用しており、WindowsではOpenSSLのバンドルコピーが付属しています。
プロトコル、暗号スイート、および主要な詳細、さらにいくつかの一般的な脆弱性のテストを一覧表示します。特定のチェックを有効または無効にして、より多くのデータを取得したり、スキャンをスピードアップしたりすることができます。
FTPでAUTH TLS
を実行するものを探している間に、私はこのツールを発見しました: ssl-cipher-suite-enum
これはPerlスクリプトで、基本的にはハッカーのシェルスクリプトの動作を実行しますが、より洗練されています。
それはまた提供された暗号とプロトコルの基本的な評価を提供します。これはSSL Labsツールにやや似ていますが、家庭用のみです。 :)
デフォルトでは、FTP上のAUTH SSL
しかサポートしていませんが、単純な検索と置換でそれを修正できます。ボーナスとして、それはまたSTARTTLS
とRDPでSMTPをサポートすると主張します。
これらの答えはすべて問題ありません。回答の一部として、サーバーのリストを検出し、TLSクライアントがサーバーに接続したときのTLSクライアントのように、サポートされているすべての暗号スイートを提供するように直接TLSに依頼しないツールが必要なのはなぜでしょうか。
答えはサーバーはリストを送信しない、クライアント暗号リストで使用したい暗号を選択するだけです。これがSSL/TLSプロトコルの書き方です: http://wiki.opensslfoundation.com/index.php/SSL_and_TLS_Protocols#Cipher_Suites
そのため、クライアントは、サーバーでサポートされている暗号を見つけて、各暗号スイートごとに少なくとも1つの新しい開始ハンドシェイク(ClientHello)を実行できるように暗号を列挙する必要があります。
あなたができる唯一のことはそれらを全部、一度に一つずつ試して、どれが受け入れられるか見ることです。私はこれを行うためのツールを意識していませんが、スクリプト作成ツールとopenssl s_client
を組み合わせて1つにまとめるのは難しいことではありません。
クライアントはどの暗号スイートを受け入れるかをアドバタイズしますが、サーバーはそれを選択してそれを使用するか、気に入ったものが見つからない場合は接続を失敗します。