題 如何列出特定網站提供的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的東西。我知道我可以通過對話的十六進制轉換,但我希望有一些更優雅的東西。

我寧願在Linux上這樣做,但Windows(或其他)會很好。這個問題是由我為PCI和一般滲透測試進行的安全測試所激發的。

更新: 

GregS在下面指出SSL服務器從客戶端的密碼套件中選擇。所以我似乎需要一次測試一個密碼套件。我想我可以一起破解某些東西,但是有更簡單,更具前瞻性(例如新密碼)的方法嗎?


235
2018-02-15 18:47


起源


也許 gnutls-cli? - grawity
標題更改後,這個問題真的不是要求軟件rec。投票重新開始。 - Bob
@ fixer1234如果它讓你更開心,我已經刪除了任何“工具”這個詞。核心問題是詢問如何完成特定任務;這是一個小修改,遠不是更開放的“軟件列表”類型問題。 - Bob
@Bob:我欣喜若狂。 :-)投票重新開放。 - fixer1234


答案:


我寫了一個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

編輯:添加靈活性,因為主機和端口作為參數提供給腳本


205
2017-12-20 23:41



openssl 1.0需要改變: if [[ "$result" =~ "Cipher :" ]] ; then 代替 if [[ "$result" =~ "Cipher is " ]] ; then 我還測試SSL2和安全重新協商: echo -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 Kario
還有另一個非常複雜的shell腳本可用,它使用sslscan和openssl: TLSSLed - Robert
我在下面列出了另一個只需要調用OpenSSL的腳本 CipherScan - Olivier - interfaSys
請注意這個腳本 可能不會 告訴您服務器是否支持OpenSSL不支持的密碼套件。 - sampablokuper
來自@Robert的建議 TLSSLed 太棒了它已更新為1.3並具有更多功能。我一直在用於安全測試,必須說我印象深刻。 - John Yeary


NMAP 同 SSL-枚舉密碼

沒有更好或更快的方法來從網絡服務獲取可用密碼列表。加, NMAP 將為每個可用密碼提供強,弱或未知的強度等級。

首先,下載 SSL-枚舉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

138
2018-06-05 09:29



有沒有辦法在使用STARTTLS的IMAP上使用此腳本?有關SMTP的STARTTLS似乎有效,但在IMAP上,該腳本似乎無法運行。 - Giel
幾件事:您可能正在nmap發行版中運行腳本,而不是您下載的腳本。通過重命名您的檢查。然後檢查“portrule”,在某些版本中檢查常用的端口號。用。。。來代替 portrule = function() \n return true \n end - slim
...而且需要一些黑客才能使用IMAP STARTTLS,FTPS AUTH TLS 等等,但這是可能的。 - slim
需要注意的是,舊腳本(可能包含在您的發行版/包中)按字母順序列出密碼, 不 服務器(或客戶端)首選訂單。請參閱@slim的上述評論 - Clint Pachl
在撰寫此答案後的兩年內,Nmap已經通過FTP,NNTP,IMAP,LDAP,POP3,PostgreSQL,SMTP,XMPP,VNC和MS SQL添加了對STARTTLS的支持,以及除了簡單列出支持的密碼之外的許多其他改進。 - bonsaiviking


有沒有可以測試什麼的工具   SSL / TLS密碼套件特別適用   網站提供?

是的,您可以使用在線工具 SSL實驗室'用於查詢公共SSL服務器數據庫的網站。

以下是它提供的一小部分信息:

alt text

(來自google.com的結果截圖)


96
2018-02-20 18:02



很酷,謝謝你的發現。 - James K Polk
這是 究竟 我在找什麼!非常感謝! - Jeremy Powell
不幸的是,它只支持標準端口上的HTTPS,不能用它來檢查POP3S,IMAPS或IMAP與TLS - Hubert Kario
雖然它只支持HTTPS,但它甚至缺乏對SNI的支持。 - Gurken Papst
雖然它非常適合面向公眾的站點,但您不能將它用於與Internet隔離的網絡上的站點。 - Iszi


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

49
2018-03-18 22:21



yum install sslscan 適用於CentOS 6。 - a coder
sudo dnf install sslscan 在Fedora 22上也是如此。 - Zayne S Halsall
brew install sslscan 在OSX上 - Xiao
sudo apt-get install sslscan 在Ubuntu上(12.04 - 因此所有更高版本應該沒問題)。 - balu
更新:應該注意的是在Debian和Ubuntu存儲庫中找到的sslscan正式版(目前從2009年的1.8.2) 才不是 支持TLS v1.1和1.2,請參閱 bugs.launchpad.net/ubuntu/+source/sslscan/+bug/1372741。因此,應該使用OP鏈接到的GitHub上的版本。 - balu


由於這是SSL掃描工具的一個很好的參考線程,我將列出一年前創建的CipherScan,並且還可以識別密鑰交換密碼的問題。 https://github.com/jvehent/cipherscan

如果你想要我的支持SNI和FreeBSD的fork,那麼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輸出很有用。


14
2017-09-16 11:25



“不支持big-SSLv3配置,連接失敗” - a coder


https://github.com/iSECPartners/sslyze

這個是基於Python的,可以從命令行在Linux / Mac / Windows中運行。


12
2018-01-25 14:01





經過一番谷歌搜索我發現了這一點 SSL-TLS測試(OWASP-CM-001)

NMAP 掃描儀通過“-sV”掃描選項,能夠識別SSL服務。漏洞掃描程序除了執行服務發現外,還可能包括對弱密碼的檢查(例如, Nessus掃描儀 能夠在任意端口上檢查SSL服務,並報告弱密碼)。

並且: Foundstone SSL Digger 是一種通過測試支持的密碼來評估SSL服務器強度的工具。已知這些密碼中的一些是不安全的。


8
2018-02-20 16:30





我正在使用大多數SSL測試testssl.sh(參見 https://testssl.sh / devel版本@ https://github.com/drwetter/testssl.sh。它測試漏洞,密碼,協議等。


4
2018-01-10 17:36