Roky používám na otestování nastavení SSL / TLS webový scanner od Qualys SSL Labs SSL Test. Jenže, ten je webový, to znamená že otestuje pouze servery vystavené do internetu a také se výsledky testů ukládají někam, kam možná ani nechcete (aneb stejně jako různé webové „testery“ na hesla, toto může sloužit pro vytipování méně zabezpečených cílů).
SSL Labs Test
Zkrácená ukázka výstupu:
Na druhou stranu SSL Labs k výsledkům poskytne dobrou interpretaci a doporučení, co a jak zlepšit.
nmap
Hledal jsem testy instalovatelné na vlastní železo. Dá se použít nmap:
$ nmap --script ssl-enum-ciphers -p 443 host
Zkrácená ukázka
| TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
A nebezpečné šifry si vygrepovat. (Pokud ještě někde používáte RC4 – nevím přesně, koho toto může ohrožovat, min. Apache webserver ve výchozí konfiguraci zakazuje RC4 už hodně dlouho – tak teď je příležitost začít testovat i na přítomnost RC4.)
Skriptíků pro nmap existuje víc (aktuálně 498), pro kontrolu certu se hodí třeba ssl-cert.
openssl s_client
Dále se dá testovat pomocí openssl s_client
, ale toto mi nikdy nepřirostlo k srdci.
Příklad: Test na připojení pomocí zastaralého a nebezpečného protokolu SSLv3:
openssl s_client -ssl3 -connect www.heronovo.cz:443
CONNECTED(00000003) 140199351236240:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1294:SSL alert number 40 140199351236240:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:618:
Připojení neprošlo. To je dobře.
Na druhou stranu se pomocí s_client
dá dobře zobrazit certifikát a celý řetězec. Tohle je věc, která se neskutečně blbě testuje v prohlížečích, protože ty si (zejména) mezilehlé certifikáty umí natahat sami, i když je server (chybně) neposílá.
testssl.sh
No a konečně se dostávám k poslednímu skriptíku, který automatizuje vše předchozí. testssl.sh (líbí se mi kreativní využití TLD, adminům mysql je jistě znám skript stažitelný z adresy mysqltuner.pl) je bashový skript pro otestování SSL a TLS (a STARTTSL). Takže se dá použít i na otestování IMAP(s), SMTP(s) apod.
Příklad:
testssl.sh www.heronovo.cz | aha > www.heronovo.cz.test.html
(Utilitka aha
převede barevný výstup z konzole do jednoduchého html souboru.)
Ukázkový zkrácený výstup:
testssl.sh
umí testovat i startls, což se hodí pro test imapového serveru:
testssl.sh -t imap localhost:143 imap
Pokud potřebuju na SSL Labs otestovat něco, co není vystavené na internetu, udělám si na chvíli tunel (musí být na portu 443). Otestuju a tunel zruším, takže i kdyby chtěl výsledky někdo zneužít, na cílové IP adrese už nic nenajde.
Ano, to je také způsob, jsou ale stroje kde tohle udělat nelze.