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

368412
Jeremy Powell

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

Ich habe openssl ausprobiert, 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 Verschlüsselungssuite etwas mit AES256-SHA ist. Ich weiß, dass ich durch den Hex-Dump des Gesprächs greifen konnte, aber ich hoffte auf etwas eleganteres.

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

Aktualisieren:

GregS weist im Folgenden darauf hin, dass der SSL-Server aus den Verschlüsselungssuiten des Clients stammt. Es scheint also, ich müsste alle Chiffriersuiten nacheinander testen. Ich denke, ich kann etwas zusammen hacken, aber gibt es einen einfacheren und zukunftssichereren Weg (z. B. neue Chiffren), um dies zu tun?

236
Vielleicht `gnutls-cli`? grawity vor 14 Jahren 0
Nach der Titeländerung fragt diese Frage wirklich nicht nach einer Software-Rec. Abstimmung zur Wiedereröffnung Bob vor 9 Jahren 0
@ fixer1234 Wenn es dich glücklicher macht, habe ich das Vorkommen des Wortes "Werkzeug" entfernt. Die Kernfrage lautet, wie man eine bestimmte Aufgabe trotzdem erledigen kann. Es ist eine geringfügige Umformulierung und weit entfernt von offeneren Fragen zu "Software-Fragen". Bob vor 9 Jahren 0
@ Bob: Ich bin begeistert. :-) Abstimmung zur Wiedereröffnung. fixer1234 vor 9 Jahren 0

20 Antworten auf die Frage

205
indiv

Ich habe ein Bash-Skript geschrieben, um Chiffre-Suites zu testen. Es erhält eine Liste der unterstützten Chiffriersätze von OpenSSL 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 $ 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 $" || "$result" =~ "Cipher :" ]] ; then echo YES else echo UNKNOWN RESPONSE echo $result fi fi sleep $DELAY done 

Beispielausgabe mit drei nicht unterstützten Chiffren und einer unterstützten Chiffre:

[@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: Flexibilität hinzufügen, da Host und Port als Parameter für das Skript bereitgestellt werden

Das ist fantastisch. Es ist sogar noch genau das, wonach ich gesucht habe. Jeremy Powell vor 13 Jahren 0
openssl 1.0 muss geändert werden: `if [[" "$ result" = ~ "Cipher:"]]; then` statt `if [[" $ result "= ~" Cipher is "]]; Dann prüfe ich auch auf SSL2 und sichere Neuverhandlung: `echo -n Testing ssl2 ... result = $ (echo -n | openssl s_client -ssl2 -connect $ SERVER 2> & 1) if [[" $ result "= ~" Ziffer: "]]; dann Echo unterstützt. UNSICHER! sonst echo keine Unterstützung, OK fi echo -n SSL-sichere Neuverhandlung testen ... echo -n "" | openssl s_client -connect $ SERVER 2> & 1 | grep "Sichere Neuverhandlung" Hubert Kario vor 13 Jahren 7
Es gibt ein weiteres, sehr ausgefeiltes Shell-Skript, das sslscan und openssl verwendet: [TLSSLed] (http://www.taddong.com/de/lab.html#TLSSLED) Robert vor 12 Jahren 7
@HubertKario - spätere Versionen von openssl unterstützen das Flag -ssl2 nicht (obwohl es immer noch in der Hilfe aufgeführt ist). Steven vor 11 Jahren 0
Ich habe unten ein anderes Skript aufgelistet, für das nur OpenSSL mit dem Namen [CipherScan] erforderlich ist (https://github.com/oparoz/cipherscan). Olivier - interfaSys vor 10 Jahren 2
@ indiv Ich habe die Datei "test_ciphers" mit dem Skript in Ihrer Antwort erstellt und versuche, das Skript in der Konsole "openSSL" unter "openSSL> test_ciphers" auszuführen. Ich erhalte jedoch "openssl": Fehler: "test_ciphers" ist ein ungültiger Befehl. Können Sie mir sagen, wie Sie Ihr Skript in Windows ausführen können? RanPaul vor 9 Jahren 0
@RanPaul: Sie können cygwin oder msys installieren, um die Bash-Shell abzurufen, und dieses Skript dann als Bash-Skript ausführen. Ich habe versucht, ein natives Windows-Skript zu schreiben, aber es gibt einen Fehler in "openssl s_client", der dazu führt, dass es hängen bleibt, bis ein Tastendruck ausgeführt wird. Dies ist also nicht möglich. indiv vor 9 Jahren 0
@indiv das ist super! Ich habe ein paar Verbesserungen für meine Verwendung hinzugefügt. Wie kann ich diese am besten für alle verfügbar machen? insaner vor 8 Jahren 0
@insaner: Wenn sie umfangreich sind, würde ich sagen, dass sie in einer neuen Antwort veröffentlicht werden. Ich habe keine gute Antwort auf das, was ich tun soll. indiv vor 8 Jahren 0
@indiv, hier ist es: http://superuser.com/a/1035879/316396 insaner vor 8 Jahren 0
Beachten Sie, dass dieses Skript [wahrscheinlich nicht] (http://superuser.com/a/1125778/11574) Ihnen mitteilt, ob ein Server Verschlüsselungssuiten unterstützt, die OpenSSL nicht unterstützt. sampablokuper vor 8 Jahren 1
Der Vorschlag von @Robert für [TLSSLed] (http://www.taddong.com/de/lab.html#TLSSLED) war fantastisch. Es wurde auf 1.3 aktualisiert und bietet viel mehr Funktionalität. Ich habe für Sicherheitstests verwendet und muss sagen, dass ich beeindruckt bin. John Yeary vor 6 Jahren 1
138
Clint Pachl

Nmap mit Ssl-Enum-Chiffren

Es gibt keine bessere oder schnellere Methode, um eine Liste der verfügbaren Verschlüsselungen von einem Netzwerkdienst abzurufen. Außerdem liefert nmap für jede verfügbare Chiffre eine Bewertung der Stärke von stark, schwach oder unbekannt.

Laden Sie zunächst das Skript ssl-enum-ciphers.nse nmap herunter ( Erläuterung hier ). Führen Sie dann aus demselben Verzeichnis wie das Skript nmap wie folgt aus:

Listen Sie die von einem HTTP-Server unterstützten Verschlüsselungscodes auf

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

Listen Sie die von einem IMAP-Server unterstützten Verschlüsselungscodes auf

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

Hier ist ein Ausschnitt der Ausgabe von 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 
Gibt es eine Möglichkeit, dieses Skript in IMAP mit STARTTLS zu verwenden? STARTTLS unter SMTP scheint zu funktionieren, aber unter IMAP scheint das Skript nicht einmal zu laufen. Giel vor 10 Jahren 2
Ein paar Dinge: Sie können das Skript möglicherweise in Ihrer nmap -Distribution ausführen, nicht in dem, das Sie heruntergeladen haben. Überprüfen Sie, indem Sie Ihre umbenennen. Überprüfen Sie dann die "Portrule", die in einigen Versionen nach häufig verwendeten Portnummern sucht. Ersetzen durch `portrule = function () \ n return true \ n end ' slim vor 9 Jahren 0
... und es müsste ein wenig gehackt werden, um mit IMAP STARTTLS, FTPS `AUTH TLS` usw. zu arbeiten, aber es ist möglich. slim vor 9 Jahren 0
Das nmap-Paket von Debian scheint das Skript ssl-enum-ciphers zu enthalten. : +1: ThorSummoner vor 8 Jahren 0
Ein Nachteil ist jedoch, dass ältere Skripte, die möglicherweise in Ihrer Distribution / Ihrem Paket enthalten sind, die Chiffren in alphabetischer Reihenfolge auflisten, ** nicht ** Server- (oder Client-) bevorzugte Reihenfolge. Siehe den obigen Kommentar von @slim Clint Pachl vor 8 Jahren 1
In den zwei Jahren, seitdem diese Antwort verfasst wurde, hat Nmap STARTTLS über FTP, NNTP, IMAP, LDAP, POP3, PostgreSQL, SMTP, XMPP, VNC und MS SQL sowie viele andere Verbesserungen hinzugefügt, außer der Auflistung der unterstützten Verschlüsselungscodes . bonsaiviking vor 8 Jahren 3
96
Kez

Gibt es ein Tool, mit dem Sie testen können, welche SSL- / TLS-Verschlüsselungs-Suites eine bestimmte Website bietet?

Ja, Sie können das Online-Tool auf der Website von SSL Labs verwenden, um die öffentliche SSL-Server-Datenbank abzufragen.

Hier ist ein Ausschnitt von Informationen, die es zur Verfügung stellt:

Alt-Text

(Screenshot aus Ergebnissen von google.com)

cool, danke für das finden. James K Polk vor 14 Jahren 0
Genau das, wonach ich gesucht habe! Danke vielmals! Jeremy Powell vor 14 Jahren 0
Leider unterstützt es nur HTTPS für den Standardport. Es kann nicht verwendet werden, um POP3S, IMAPS oder IMAP mit TLS zu überprüfen Hubert Kario vor 13 Jahren 10
Während es nur HTTPS unterstützt, fehlt ihm sogar die Unterstützung für SNI. Gurken Papst vor 12 Jahren 1
Die Website ist zwar für öffentlich zugängliche Websites geeignet, sie kann jedoch nicht für Websites in Netzwerken verwendet werden, die vom Internet isoliert sind. Iszi vor 9 Jahren 10
49
indiv

sslscan ist ein schönes kleines Dienstprogramm.

Es testet die Verbindung mit TLS und SSL (und das Build-Skript kann eine Verknüpfung mit seiner eigenen OpenSSL-Kopie herstellen, sodass auch veraltete SSL-Versionen geprüft werden) und Berichte über die Verschlüsselungssuites und das Zertifikat des Servers.

Beispielausgabe für google.com(auf Lesbarkeit getrimmt):

$ 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 
`yum install sslscan` funktioniert auf CentOS 6. a coder vor 9 Jahren 1
`sudo dnf install sslscan` auch auf Fedora 22. Zayne S Halsall vor 9 Jahren 1
`brew install sslscan` unter OSX Xiao vor 8 Jahren 2
`sudo apt-get install sslscan` auf Ubuntu (12.04 - alle späteren Versionen sollten also in Ordnung sein). balu vor 8 Jahren 0
Update: Es ist zu beachten, dass die offizielle Version von sslscan in den Repositorys von Debian und Ubuntu (derzeit 1.8.2 von 2009) * TLS v1.1 und 1.2 nicht unterstützt *, siehe https://bugs.launchpad.net/ Ubuntu / + source / sslscan / + bug / 1372741. Man sollte daher die Version auf GitHub verwenden, mit der das OP verlinkt ist. balu vor 8 Jahren 2
14
Olivier - interfaSys

Da dies ein hervorragender Referenz-Thread für SSL-Scan-Tools ist, liste ich CipherScan auf, das vor einem Jahr erstellt wurde, und kann auch Probleme mit Schlüsselaustauschchiffren erkennen. https://github.com/jvehent/cipherscan

Wenn Sie eine Gabel wünschen, die SNI und FreeBSD unterstützt, lautet die URL https://github.com/oparoz/cipherscan

Es ist ein Skript, das openssl s_clientmithilfe Ihrer eigenen OpenSSL-Binärdatei aufruft und es unterstützt, sodass Sie kommende Funktionen oder neue Chiffren testen können (chacha20 + poly1305 pro Beispiel).

Außerdem können Sie eine Verbindung zu einem beliebigen Port herstellen 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 dies von anderen Skripten aus aufrufen.

"big-SSLv3-Konfiguration wird nicht unterstützt, Verbindung fehlgeschlagen" a coder vor 9 Jahren 0
12
Scott

https://github.com/iSECPartners/sslyze

Dieses basiert auf Python und funktioniert von der Befehlszeile aus unter Linux / Mac / Windows.

8
fluxtendu

Nach ein wenig googeln fand ich diesen Test für SSL-TLS (OWASP-CM-001) :

Der nmap- Scanner kann über die Scanoption „–sV“ SSL-Dienste identifizieren. Anfälligkeitsscanner können neben der Dienstermittlung auch Überprüfungen auf schwache Verschlüsselungen umfassen (z. B. kann der Nessus-Scanner SSL-Dienste an beliebigen Ports prüfen und mangelhafte Verschlüsselungen melden).

und auch: Foundstone SSL Digger ist ein Tool, um die Stärke von SSL-Servern durch Testen der unterstützten Chiffren zu ermitteln. Einige dieser Chiffren sind bekanntermaßen unsicher.

4
Dirk

Ich verwende für die meisten SSL-Tests testssl.sh (siehe https://testssl.sh / devel version @ https://github.com/drwetter/testssl.sh . Es werden Schwachstellen, Verschlüsselungen, Protokolle usw. geprüft .

2
Dwayne

SSLScan ist großartig. Ein neues Tool SSLDiagnos funktioniert für Windows, oder Sie können ein Skript einfach mit dem openssl s_client schreiben.

2
Pi3cH

Es gibt ein nettes kleines Skript auf pentesterscripting.com, in dem SSLScan und OpenSSL verwendet werden, um Folgendes zu überprüfen:

  • SSL v2;
  • Wochenverschlüsselung passt;
  • MD5; und
  • TLS Renegotiation-Schwachstelle

http://www.pentesterscripting.com/discovery/ssl_tests (über die Internet Archive Wayback Machine )

Hier für die Zukunftssicherung dupliziert, da der Hauptsitz jetzt tot ist:

#!/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](;[0-9])?)?[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](;[0-9])?)?[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 

Verwendung: ./ssltest.sh HOST PORT