Frage Wie liste ich die SSL / TLS-Verschlüsselungssammlungen auf, die eine bestimmte Website anbietet?


Wie kann ich eine Liste der SSL / TLS-Verschlüsselungssammlungen abrufen, die eine bestimmte Website anbietet?

Ich habe versucht, openssl, aber wenn Sie die Ausgabe untersuchen:

$ 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)
---

es zeigt nur, dass die Cipher Suite etwas mit AES256-SHA ist. Ich weiß, dass ich durch den Hexenkessel der Unterhaltung gähnen konnte, aber ich hoffte auf etwas eleganteres.

Ich würde es vorziehen, dies unter Linux zu tun, aber Windows (oder andere) wäre in Ordnung. Diese Frage ist motiviert durch die Sicherheitstests, die ich für PCI und allgemeine Penetrationstests durchführe.

Aktualisieren: 

GregS weist darauf hin, dass der SSL-Server aus den Cipher Suites des Clients auswählt. Es scheint also, dass ich alle Cipher Suites nacheinander testen müsste. Ich denke, ich kann etwas zusammenhacken, aber gibt es einen einfacheren, zukunftssichereren Weg (z. B. neue Chiffren), um das zu tun?


229
2018-02-15 18:47


Ursprung


Könnte sein gnutls-cli? - grawity
Nach dem Titelwechsel fragt diese Frage wirklich nicht nach einer Software-Rec. Abstimmung zum erneuten Öffnen - Bob
@ fixer1234 Wenn es dich glücklicher macht, habe ich jedes Vorkommen des Wortes "Werkzeug" entfernt. Die Kernfrage lautet, wie eine bestimmte Aufgabe überhaupt zu bewältigen ist. Es ist eine kleine Umformulierung und weit entfernt von mehr offenen "Liste der Software" Art Fragen. - Bob
@ Bob: Ich bin begeistert. :-) Wählen, um wieder zu öffnen. - fixer1234


Antworten:


Ich habe ein Bash-Skript geschrieben, um Cipher Suites zu testen. Es ruft eine Liste der unterstützten Verschlüsselungssammlungen von OpenSSL ab und versucht, eine Verbindung herzustellen. Wenn der Handshake erfolgreich ist, wird gedruckt YES. Wenn der Handshake nicht erfolgreich ist, wird gedruckt NO, gefolgt vom OpenSSL-Fehlertext.

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

Im Folgenden sehen Sie eine Beispielausgabe mit drei nicht unterstützten Ziffern und einer unterstützten Ziffer:

[@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

BEARBEITEN: Fügen Sie Flexibilität hinzu, da Host und Port als Parameter für das Skript bereitgestellt werden


199
2017-12-20 23:41



openssl 1.0 benötigt eine Änderung: if [[ "$result" =~ "Cipher :" ]] ; then Anstatt von if [[ "$result" =~ "Cipher is " ]] ; then Ich teste auch für SSL2 und sichere Neuverhandlung: 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
Es gibt ein weiteres, sehr ausgefeiltes Shell-Skript, das sslscan und openssl verwendet: TLSSLed - Robert
Ich habe unten ein anderes Skript aufgelistet, das nur OpenSSL erfordert CipherScan - Olivier - interfaSys
Beachten Sie, dass dieses Skript wahrscheinlich nicht Informieren Sie sich, ob ein Server Verschlüsselungssammlungen unterstützt, die OpenSSL nicht unterstützt. - sampablokuper
Der Vorschlag von @Robert für TLSSLed Es war fantastisch. Es wurde auf 1.3 aktualisiert und hat viel mehr Funktionalität. Ich habe für Sicherheitstests verwendet und muss sagen, dass ich beeindruckt bin. - John Yeary


Nmap mit ssl-enum-Chiffren

Es gibt keinen besseren oder schnelleren Weg, eine Liste verfügbarer Verschlüsselungen von einem Netzwerkdienst zu erhalten. Plus, nmap liefert für jede verfügbare Chiffre eine Stärke, die stark, schwach oder unbekannt ist.

Laden Sie zuerst die ssl-enum-ciphers.nse nmap-Skript (Erklärung hier). Führen Sie nmap dann aus demselben Verzeichnis wie das Skript wie folgt aus:

Auflisten von Verschlüsselungen, die von einem HTTP-Server unterstützt werden

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

Auflisten von Verschlüsselungen, die von einem IMAP-Server unterstützt werden

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

Hier ist ein Ausschnitt aus einem Dovecot IMAP-Server:

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

128
2018-06-05 09:29



Gibt es eine Möglichkeit, dieses Skript auf IMAP mit STARTTLS zu verwenden? STARTTLS auf SMTP scheint zu funktionieren, aber auf IMAP scheint das Skript nicht einmal zu laufen. - Giel
Ein paar Dinge: Sie können das Skript in Ihrer nmap-Distribution ausführen, anstatt in der heruntergeladenen Version. Überprüfen Sie, indem Sie Ihre umbenennen. Überprüfen Sie dann die "Portrel", die in einigen Versionen nach häufig verwendeten Portnummern sucht. Ersetzen mit portrule = function() \n return true \n end - slim
... und es müsste etwas gehackt werden, um mit IMAP STARTTLS, FTPS zu arbeiten AUTH TLS usw., aber es ist möglich. - slim
Ein Nachteil ist, dass ältere Skripte, die in Ihrem Distro / Paket enthalten sein können, Chiffren in alphabetischer Reihenfolge auflisten, nicht Bevorzugter Auftrag des Servers (oder des Klienten). Siehe den obigen Kommentar von @slim - Clint Pachl
In den zwei Jahren, seit diese Antwort geschrieben wurde, hat Nmap die Unterstützung für STARTTLS über FTP, NNTP, IMAP, LDAP, POP3, PostgreSQL, SMTP, XMPP, VNC und MS SQL sowie viele andere Verbesserungen über das bloße Auflisten unterstützter Verschlüsselungen hinaus hinzugefügt . - bonsaiviking


Gibt es ein Werkzeug, das was testen kann?   SSL / TLS-Verschlüsselung entspricht einem bestimmten   Website-Angebote?

Ja, Sie können das Online-Tool verwenden SSL-Labors'Website zum Abfragen der öffentlichen SSL-Server-Datenbank.

Hier ist ein Ausschnitt der Informationen, die es bietet:

alt text

(Screenshot von Ergebnissen von google.com)


94
2018-02-20 18:02



cool, danke, dass du das findest. - James K Polk
Das ist genau wonach ich gesucht habe! Danke vielmals! - Jeremy Powell
Leider unterstützt es nur HTTPS auf Standard-Port, kann es nicht verwenden, um POP3S, IMAPS oder IMAP mit TLS zu überprüfen - Hubert Kario
Und obwohl es nur HTTPS unterstützt, fehlt ihm sogar Unterstützung für SNI. - Gurken Papst
Und obwohl es sich hervorragend für öffentlich zugängliche Websites eignet, können Sie es nicht für Websites in Netzwerken verwenden, die vom Internet isoliert sind. - Iszi


sslscan ist ein nettes kleines Dienstprogramm.

Es testet die Verbindung mit TLS und SSL (und das Build-Skript kann mit seiner eigenen Kopie von OpenSSL verlinken, so dass veraltete SSL-Versionen ebenfalls überprüft werden) und Berichte über die Cipher-Suites und das Zertifikat des Servers.

Beispielausgabe für google.com (zur besseren Lesbarkeit verkleinert):

$ 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

47
2018-03-18 22:21



yum install sslscan funktioniert auf CentOS 6. - a coder
sudo dnf install sslscan auf Fedora 22 auch. - Zayne S Halsall
brew install sslscan auf OSX - Xiao
sudo apt-get install sslscan auf Ubuntu (12.04 - so sollten alle späteren Versionen in Ordnung sein). - balu
Update: Es sollte beachtet werden, dass die offizielle Version von sslscan in den Debian- und Ubuntu-Repositories gefunden wurde (derzeit 1.8.2 von 2009) nicht Unterstützung von TLS v1.1 und 1.2, siehe bugs.launchpad.net/ubuntu/+source/sslscan/+bug/1372741. Man sollte daher die Version auf GitHub verwenden, mit der das OP verbunden ist. - balu


Da dies ein so großer Referenzthread für SSL-Scan-Tools ist, liste ich CipherScan auf, das vor einem Jahr erstellt wurde und auch Probleme mit Schlüsselaustauschchiffren identifizieren kann. https://github.com/jvehent/ciherscan

Wenn Sie meinen Fork, der SNI und FreeBSD unterstützt, möchten, ist die URL https://github.com/oparoz/ciherscan

Es ist ein Skript, das anruft openssl s_clientund unterstützt die Verwendung Ihrer eigenen OpenSSL-Binärdatei, so dass Sie kommende Funktionen oder neue Verschlüsselungen testen können (chacha20 + poly1305 pro Beispiel).

Außerdem können Sie sich mit jedem beliebigen Port verbinden und starttlss verwenden.

Hier ist eine typische Ausgabe

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

Und hier sind eine Liste von Optionen

-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.

Die json-Ausgabe ist nützlich, wenn Sie diese aus anderen Skripten aufrufen.


14
2017-09-16 11:25



"big-SSLv3 config nicht unterstützt, Verbindung fehlgeschlagen" - a coder


https://github.com/iSECPartners/sslyze

Dieser basiert auf Python und funktioniert unter Linux / Mac / Windows von der Kommandozeile aus.


12
2018-01-25 14:01





Nach ein wenig Googeln habe ich das gefunden Testen für SSL-TLS (OWASP-CM-001):

Das nmap Mit der Scanoption "-sV" kann der Scanner SSL-Dienste identifizieren. Schwachstellenscanner können zusätzlich zur Dienstsuche auch Prüfungen gegen schwache Verschlüsselungen (z. B. die Nessus-Scanner hat die Möglichkeit, SSL-Dienste auf beliebigen Ports zu prüfen und schwache Verschlüsselungen zu melden.

und auch: Foundstone SSL Digger ist ein Tool, um die Stärke von SSL-Servern zu bewerten, indem Sie die unterstützten Verschlüsselungen testen. Einige dieser Chiffren sind als unsicher bekannt.


8
2018-02-20 16:30





Ich benutze für die meisten SSL-Tests testssl.sh (siehe https://testssl.sh / devel Version @ https://github.com/drwetter/testssl.sh. Es prüft auf Schwachstellen, Verschlüsselungen, Protokolle usw.


4
2018-01-10 17:36