2010-02-15 18:47:18 +0000 2010-02-15 18:47:18 +0000
276
276

如何列出一个特定网站提供的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的东西。我知道我可以通过对话的十六进制转储进行grep,但我希望能有一个更优雅的方法。

更新:

GregS在下面指出,SSL服务器会从客户端的密码套件中挑选。因此,我似乎需要一次测试所有的密码套件。我想我可以黑进一些东西,但是有没有一个更简单,更适合未来发展的方法(例如新的密码器)?

答案 (21)

246
246
246
2010-12-20 23:41:17 +0000

我写了一个bash脚本来测试密码套件。它从OpenSSL中获取一个支持的密码套件列表,并尝试使用每一个密码套件进行连接。如果握手成功,它会打印出YES

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

以下是显示3个不支持的密码和1个支持的密码的示例输出:

&001

EDIT: 增加了主机和端口作为脚本的参数,增加了灵活性

170
170
170
2014-06-05 09:29:14 +0000

Nmap with ssl-enum-ciphers (http://nmap.org/svn/scripts/ssl-enum-ciphers.nse)

没有比这更好或更快的方法从网络服务中获得可用密码列表了。

首先,下载ssl-enum-ciphers.nse nmap脚本[解释在这里]&003)。然后从与该脚本相同的目录下,运行nmap如下:

列出HTTP服务器支持的密码

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

列出IMAP服务器支持的密码

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

列出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

以下是Dovecot IMAP服务器的输出片段:

&001

106
106
106
2010-02-20 18:02:27 +0000

有没有工具可以测试某网站提供的SSL/TLS密码套件?

是的,你可以使用SSL Labs’网站上的在线工具查询公共SSL服务器数据库。

57
57
57
2010-03-18 22:21:08 +0000

是一个很好的小工具,它可以测试使用 TLS 和 SSL 连接(并且构建脚本可以与自己的 OpenSSL 副本链接,这样就可以检查过时的 SSL 版本),并报告服务器的密码套件和证书。

15
15
15
2014-09-16 11:25:38 +0000

由于这是一个很好的SSL扫描工具的参考线程,我将列出CipherScan,它是一年前创建的,也可以识别密钥交换密码的问题 https://github.com/jvehent/cipherscan

如果你想知道我的支持SNI和FreeBSD的叉子,网址是https://github. com/oparoz/cipherscan

这是一个调用openssl s_client的脚本,支持使用你自己的OpenSSL二进制文件,这样你就可以测试即将到来的功能或新的密码(chcha20+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输出是有用的。

13
13
13
2012-01-25 14:01:34 +0000

https://github.com/iSECPartners/sslyze

这个是基于Python的,可以在Linux/Mac/Windows的命令行中工作。

8
8
8
2010-02-20 16:30:05 +0000

经过一番搜索,我找到了这个测试SSL-TLS(OWASP-CM-001):

Nnmap扫描器,通过"-sV “扫描选项,能够识别SSL服务。漏洞扫描器除了执行服务发现外,还可能包括对弱密码的检查(例如,Nessus扫描器具有检查任意端口上的SSL服务的能力,并将报告弱密码)。Foundstone SSL Digger](http://www.mcafee.com/us/downloads/free-tools/ssldigger.aspx)是一个通过测试支持的密码器来评估SSL服务器强度的工具。其中有些密码器是不安全的。

6
6
6
2015-01-10 17:36:14 +0000

我现在使用的大部分SSL测试软件testsl.sh(见https://testssl.sh /开发版 @ https://github.com/drwetter/testssl.sh )。它可以测试漏洞、密码、协议等。

2
2
2
2014-04-09 18:31:47 +0000

如果你想要一个漂亮的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
2
2
2010-12-01 20:40:29 +0000

SSLScan很好,一个新的工具SSLDiagnos适用于Windows,或者你可以直接用openssl s_client写一个脚本。

2
2
2
2016-02-05 00:55:55 +0000

根据 @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
2
2
2012-01-19 05:39:21 +0000

pentesterscripting.com有一个很好的小脚本,可以利用SSLScan和OpenSSL来检查:

在此复制,以备将来使用,因为主网站已经死了:

#!/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
2
2
2014-03-25 21:58:08 +0000

Nmap的 ssl-enum-ciphers 脚本可以列出支持的密码和SSL/TLS版本,以及支持的压缩器。

2
2
2
2016-09-19 03:01:09 +0000

Kez的回答中提到的开发了SSL实验室在线工具的Ivan Ristić的OpenSSL Cookbook(免费的),他说:

如果你想确定某台服务器支持的所有套件,可以通过调用openssl ciphers ALL来获得你的OpenSSL版本支持的所有套件的列表。然后将它们逐一提交到服务器上,逐一测试。我并不是建议你手动完成,在这种情况下,稍加自动化就会事半功倍。事实上,在这种情况下,寻找一个好的工具可能是合适的。你只能测试OpenSSL支持的套件。….

没有一个SSL/TLS库支持所有的密码套件,这使得全面的测试变得很困难。对于SSL实验室来说,我采用了部分握手的方式来实现这个目的,用一个自定义的客户端假装支持任意套件。实际上,它甚至连一个套件都无法协商,但只要提出协商就足以让服务器告诉你是否支持某个套件。你不仅可以用这种方式测试所有套件,而且你还可以非常有效地进行测试。"

(我强调一下。)

有一个工具我在其他答案中没有看到提到过,那就是Stephen Bradshaw的SSLTest,它的目的之一是将 “检测到的密码和协议与DSD ISM和PCI-DSS等合规标准进行比较。 ”

所以,尝试一下这个或其他答案中提到的工具之一,或者建立自己的工具,并考虑使用Ristić的部分握手的方法。

1
1
1
2020-02-11 13:25:43 +0000

_这个答案总结了目前为止给出的最佳答案,并论证了为什么要选择替代方案(或不选择!)。这里的重点是安全方面,也就是说,要找出一个服务器是否存在漏洞。下一个要回答的问题是,输出的结果是否应该是机器可读的,例如,是否可以在脚本中进一步使用。testssl.sh ](https://testssl.sh/)

  • CLI (Bash)
  • TLSv1. 3
  • 检查已知的漏洞
  • 自带(不需要安装)
  • 支持 370 种密码 (从版本3.1起) ,包括已被淘汰的密码(不包括在较新的openSSL版本中)
  • 产生机器可读的结果(CSV和JSON)
  • 支持 testssl.sh 并行化)批处理
  • **慢*

也许cipherscan比起下面的替代方案,ssl-enum-ciphers最重要的优势是使用了一套专门为漏洞测试定制的二进制文件(阅读开发者的解释这里)。

2. nmap

  • CLI (python)
  • 无TLSv1.3*
  • 自带的
  • 有限的密码套件 (硬编码)
  • 产生机器可读结果 (JSON)
  • 快速

3. nmap &007

  • CLI (&007 脚本)
  • **无TLSv1.3*
  • 自带的
  • 有限的密码套件(硬编码)
  • 检查已知的漏洞
  • **无机器可读结果* * * * *

关于可用工具的详细概述,请参见 [ sslLabs 评估工具 ]&003.

1
1
1
2015-09-26 11:24:14 +0000

SSLyze,最初在https://github.com/iSECPartners/sslyze ,现在在https://github.com/nabla-c0d3/sslyze

SSLyze是基于Python,在Linux/Mac/Windows上通过命令行工作。它使用OpenSSL,在Windows上,它附带了一个OpenSSL的捆绑副本。

列出了协议、密码套件和密钥的细节,还有一些常见的漏洞测试。它可以启用或禁用特定的检查,以获得更多的数据或加快扫描速度。

1
1
1
2014-05-25 13:34:41 +0000

我写了一个工具,它就是这样做的。

[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

这里有一个工具的输出示例,它和SSL实验室的工具类似,但我发现有一个命令行工具可以自动分析和解析,这就更有用了。

0
0
0
2014-11-04 20:45:59 +0000

所有这些答案都很好。有一部分答案可以解释为什么我们需要一个工具来发现服务器的列表,而不是在TLS中直接询问服务器提供所有支持的密码套件,就像TLS客户端连接到服务器时一样。 opensslfoundation.com/index.php/SSLand\TLS\Protocols#CipherSuites ](http://wiki.opensslfoundation.com/index.php/SSL_and_TLS_Protocols#Cipher_Suites)

这就是为什么客户端必须列举出密码,才能找到服务器支持的密码,并且至少为每个密码套件做一次新的启动握手(ClientHello)。

0
0
0
2010-02-15 21:51:27 +0000

你唯一能做的就是把它们都试一试,一次一个一个的试,看看哪些是可以接受的。我不知道有什么工具可以做到这一点,尽管从脚本工具和openssl s_client中拼凑一个应该不难。

0
0
0
2016-03-02 10:02:12 +0000

TestSSLServer](http://www.bolet.org/TestSSLServer/)是一个纯粹基于Java的解决方案。优点:

  • 它的工作非常低级,只在普通Sockets上工作,所以它独立于JDK或OpenSSL可能的不可用密码**。

  • 它不需要打开任何额外的端口(比如ICMP for ping)

  • 它在客户端证书存在的情况下工作

缺点:

  • 截至2016年,密码列表可能已经过时了(虽然我不是专家在这里判断)

我的个人经验。给定了一个只开放一个HTTPS端口(没有其他端口)、需要客户端证书和iptables激活的服务器,它仍然能够列出可用的密码列表,而顶级的解决方案则不能(我正在尝试小的shell脚本、SSL Labs、NMap、sslscan

0
0
0
2014-12-20 23:56:37 +0000

在寻找能在FTP上做AUTH TLS的东西时,我发现了这个工具。ssl-cipher-suite-enum ](https://labs.portcullis.co.uk/tools/ssl-cipher-suite-enum/)

它是一个perl脚本,基本上和hackajar的shell脚本一样,只是更加复杂。它有点像SSL实验室的工具,只适合家庭使用。 :)

默认情况下,它只支持FTP上的AUTH SSL,但简单的搜索和替换就可以解决这个问题。作为额外的奖励,它还声称支持STARTTLS和RDP的SMTP。