Wie kann ich eine Liste der SSL / TLS-Verschlüsselungssuiten 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 wusste, dass ich den Hex-Dump der Unterhaltung durchgehen konnte, aber ich hoffte auf etwas Eleganteres.
Ich würde es vorziehen, dies unter Linux zu tun, aber Windows (oder andere) wären in Ordnung. Diese Frage wird durch die Sicherheitstests, die ich für PCI und allgemeine Penetrationstests durchführe, motiviert.
Aktualisieren:
GregS weist darauf hin, dass der SSL-Server aus den Chiffresuiten des Clients wählt. Es scheint also, als müsste ich alle Chiffresuiten einzeln testen. Ich denke, ich kann etwas zusammen hacken, aber gibt es eine einfachere, zukunftssicherere Möglichkeit (z. B. neue Chiffren), dies zu tun?
gnutls-cli
?Antworten:
Ich habe ein Bash-Skript geschrieben, um Cipher Suites zu testen. Von OpenSSL wird eine Liste der unterstützten Cipher Suites abgerufen, und es wird versucht, eine Verbindung mit jedem einzelnen herzustellen. Wenn der Handshake erfolgreich ist, wird gedruckt
YES
. Wenn der Handshake nicht erfolgreich ist, wird er gedrucktNO
, gefolgt vom OpenSSL-Fehlertext.Hier ist eine Beispielausgabe mit 3 nicht unterstützten Chiffren und 1 unterstützten Chiffren:
BEARBEITEN: Flexibilität hinzufügen, da Host und Port als Parameter für das Skript bereitgestellt werden
quelle
if [[ "$result" =~ "Cipher :" ]] ; then
stattdessenif [[ "$result" =~ "Cipher is " ]] ; then
teste ich auch auf 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'
Nmap mit ssl-enum-chiffren
Es gibt keine bessere oder schnellere Möglichkeit, eine Liste der verfügbaren Chiffren von einem Netzwerkdienst abzurufen. Außerdem nmap liefert eine Stärke - Rating von stark, schwach oder unbekannt für jede verfügbare Chiffre.
Laden Sie zunächst das Skript ssl-enum-ciphers.nse nmap herunter ( Erklärung hier ). Führen Sie dann im selben Verzeichnis wie das Skript nmap wie folgt aus:
Liste der von einem HTTP-Server unterstützten Chiffren auf
Liste der von einem IMAP-Server unterstützten Chiffren auf
Hier ist ein Ausschnitt der Ausgabe von einem Dovecot IMAP-Server:
quelle
portrule = function() \n return true \n end
AUTH TLS
usw. zu arbeiten, aber es ist möglich.Ja, Sie können das Online-Tool auf der Website von SSL Labs verwenden , um die öffentliche SSL-Serverdatenbank abzufragen.
Hier ist ein Auszug der darin enthaltenen Informationen:
(Screenshot von Ergebnissen von google.com)
quelle
sslscan ist ein nettes kleines Dienstprogramm.
Es testet die Verbindung mit TLS und SSL (und das Build-Skript kann eine Verbindung mit seiner eigenen OpenSSL-Kopie herstellen, sodass auch veraltete SSL-Versionen überprüft werden) und meldet die Verschlüsselungssammlungen und Zertifikate des Servers.
Beispielausgabe für
google.com
(aus Gründen der Lesbarkeit verkleinert):quelle
yum install sslscan
funktioniert auf CentOS 6.sudo dnf install sslscan
auch auf Fedora 22.brew install sslscan
auf OSXsudo apt-get install sslscan
auf Ubuntu (12.04 - so sollten alle späteren Versionen in Ordnung sein).Da dies ein großartiger Referenz-Thread für SSL-Scan-Tools ist, liste ich CipherScan auf, das vor einem Jahr erstellt wurde und auch Probleme mit Schlüsselaustausch-Chiffren identifizieren kann. https://github.com/jvehent/cipherscan
Wenn Sie möchten, dass mein Fork SNI und FreeBSD unterstützt, lautet die URL https://github.com/oparoz/cipherscan
Es ist ein Skript, das
openssl s_client
Ihre eigene OpenSSL-Binärdatei aufruft und unterstützt, damit Sie kommende Funktionen oder neue Chiffren testen können (chacha20 + poly1305 pro Beispiel).Sie können sich auch mit einem beliebigen Port verbinden und starttlss verwenden.
Hier ist eine typische Ausgabe
Und hier ist eine Liste von Optionen
Die json-Ausgabe ist nützlich, wenn Sie dies von anderen Skripten aus aufrufen.
quelle
https://github.com/iSECPartners/sslyze
Dieser basiert auf Python und funktioniert unter Linux / Mac / Windows über die Befehlszeile.
quelle
Nach ein wenig googeln fand ich diesen Test für SSL-TLS (OWASP-CM-001) :
und außerdem: Foundstone SSL Digger ist ein Tool zur Bewertung der Stärke von SSL-Servern durch Testen der unterstützten Verschlüsselungen. Einige dieser Chiffren sind als unsicher bekannt.
quelle
Ich verwende 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, Chiffren, Protokolle usw.
quelle
SSLScan ist großartig; ein neues Tool SSLDiagnos funktioniert für Windows, oder Sie können einfach ein Skript mit dem openssl s_client schreiben.
quelle
Das Skript ssl-enum-ciphers von Nmap kann die unterstützten Chiffren und SSL / TLS-Versionen sowie die unterstützten Kompressoren auflisten .
quelle
ssl-enum-ciphers
viel umfassender.Wenn Sie eine schöne grepable Ausgabe wollen (und Unterstützung für die Überprüfung aller SSL / TLS-Versionen)
Verwendung: ./script.sh www.url.com
quelle
openssl ciphers -tls1.1
undopenssl ciphers -tls1.2
diese Parameter scheinen nicht zu existieren ... Es gibt sie nur-tls1
(zumindest auf den Plattformen, die ich ausprobiert habe).tls1_1
undtls1_2
doch sind sie nur auf der gezeigten Master - Version von OpenSSL und nicht einmal in 1.0.2 ....)Auf pentesterscripting.com gibt es ein nettes kleines Skript, mit dem Sie mit SSLScan und OpenSSL nach Folgendem suchen können:
http://www.pentesterscripting.com/discovery/ssl_tests (über das Internet Archive Wayback Machine )
Dupliziert hier zur Zukunftssicherung, da die Hauptseite nun tot ist:
Verwendung: ./ssltest.sh HOST PORT
quelle
Basierend auf der Antwort von @ indiv und dem Vorschlag, sie als eigene Antwort zu veröffentlichen, stelle ich meine optimierte Version des Skripts von @ indiv bereit. Sie können als erstes Argument einen Host angeben, der dieselben Ergebnisse ausgibt wie das ursprüngliche Skript, jedoch etwas formatierter:
quelle
Das (kostenlose) OpenSSL-Kochbuch von Ivan Ristić, der das in Kez 'Antwort erwähnte Online-Tool SSL Labs entwickelt hat , besagt:
(Meine Betonung.)
Ein Tool, das ich in anderen Antworten nicht gesehen habe, ist der SSLTest von Stephen Bradshaw , mit dem unter anderem "die erkannten Chiffren und Protokolle mit Compliance-Standards wie DSD ISM und PCI-DSS verglichen werden" sollen.
Probieren Sie dieses oder eines der in den anderen Antworten genannten Tools aus, oder erstellen Sie ein eigenes, und ziehen Sie Ristićs Ansatz für partielle Handshakes in Betracht.
quelle
Ich habe ein Tool geschrieben, das genau das tut. Es heißt tlsenum und ist auf GitHub verfügbar .
Hier ist ein Beispiel für die Ausgabe des Tools gegen
twitter.com
.Es ist ähnlich wie in SSL Lab, aber ich finde, dass ein Befehlszeilen-Tool, das Sie automatisieren und analysieren können, viel nützlicher ist.
quelle
SSLyze, ursprünglich unter https://github.com/iSECPartners/sslyze , befindet sich jetzt unter https://github.com/nabla-c0d3/sslyze . Es wurde in einer anderen Antwort erwähnt , aber ohne viel Detail.
SSLyze basiert auf Python und funktioniert unter Linux / Mac / Windows über die Befehlszeile. Es verwendet OpenSSL und wird unter Windows mit einer gebündelten Kopie von OpenSSL geliefert.
Listet Protokolle, Cipher Suites und Schlüsseldetails sowie Tests für einige häufig auftretende Sicherheitsanfälligkeiten auf. Sie können bestimmte Überprüfungen aktivieren oder deaktivieren, um mehr Daten abzurufen oder den Scan zu beschleunigen.
quelle
Das Einzige, was Sie tun können, ist, alle nacheinander auszuprobieren und festzustellen, welche akzeptiert werden. Ich kenne kein Tool, um dies zu tun, obwohl es nicht schwierig sein sollte, eines aus Skriptwerkzeugen und zusammenzusetzen
openssl s_client
.Während der Client angibt, welche Chiffriereinheiten er akzeptiert, wählt der Server einfach eine aus und verwendet sie oder schlägt die Verbindung fehl, wenn er nichts findet, was ihm gefällt.
quelle
All diese Antworten sind in Ordnung. Ein Teil der Antwort könnte erklären, warum wir ein Tool benötigen, um die Liste der Server zu ermitteln und nicht direkt in TLS nachzufragen, dass der Server alle unterstützten Chiffresuiten bereitstellt, genau wie der TLS-Client, wenn er eine Verbindung zu einem Server herstellt.
Die Antwort ist, dass der Server niemals eine Liste sendet . Er wählt lediglich in der Client-Verschlüsselungsliste die Verschlüsselung aus, die er verwenden möchte. So ist das SSL / TLS-Protokoll geschrieben: http://wiki.opensslfoundation.com/index.php/ SSL_and_TLS_Protocols # Cipher_Suites
Aus diesem Grund muss der Client Chiffren auflisten, um die vom Server unterstützten zu finden, und dazu mindestens einen neuen Start-Handshake (ClientHello) für jede Chiffrensuite ausführen.
quelle
Auf der Suche nach etwas, das
AUTH TLS
auf FTP funktioniert , habe ich folgendes Tool entdeckt: ssl-cipher-suite-enumEs ist ein Perl-Skript, das im Grunde das tut, was Hackajars Shell-Skript tut, nur raffinierter.
Es bietet auch eine grundlegende Bewertung der angebotenen Chiffren und Protokolle. Es ist etwas wie SSL Labs-Tools, nur für den Heimgebrauch. :)
Standardmäßig wird nur
AUTH SSL
FTP unterstützt , dies kann jedoch durch einfaches Suchen und Ersetzen behoben werden. Als Bonus behauptet es auch, SMTP mitSTARTTLS
und RDP zu unterstützen.quelle
TestSSLServer ist eine rein Java-basierte Lösung. Vorteile:
Es funktioniert auf sehr niedriger Ebene, nur auf einfachen Sockets, sodass es von möglichen nicht verfügbaren Chiffren von JDK oder OpenSSL unabhängig ist .
Es müssen keine zusätzlichen Ports (wie ICMP für Ping) geöffnet werden
Es funktioniert mit vorhandenen Client-Zertifikaten
Nachteile:
Meine persönliche Erfahrung: Angesichts eines engmaschigen Servers mit nur einem offenen HTTPS-Port (kein anderer Port), erforderlichen Clientzertifikaten und aktiven iptables konnte er immer noch verfügbare Chiffren auflisten, während die von den Top-Votes gewählten Lösungen dies nicht waren (ich war es) versuchen kleines Shell-Skript, SSL Labs, NMap, sslscan)
quelle