W celu złagodzenia luki w zabezpieczeniach Poodle, chciałbym wyłączyć obsługę SSLv3 na moim serwerze (w tym przypadku TLS zamiast HTTPS). Jak mogę użyć openssl s_client
, aby sprawdzić, czy to zrobiłem?
W celu złagodzenia luki w zabezpieczeniach Poodle, chciałbym wyłączyć obsługę SSLv3 na moim serwerze (w tym przypadku TLS zamiast HTTPS). Jak mogę użyć openssl s_client
, aby sprawdzić, czy to zrobiłem?
Aby sprawdzić, czy wyłączyłeś obsługę SSLv3, uruchom następującą
openssl s_client -connect example.com:443 -ssl3
co powinno dać coś takiego jak
3073927320: error: 14094410: procedury SSL: SSL3_READ_BYTES: sslv3 alert handshake failure: s3_pkt.c: 1258: SSL alert numer 403073927320: błąd: 1409E0E5: procedury SSL: SSL3_WRITE_BYTES: błąd uzgadniania ssl: s3_pkt.c: 596:
co oznacza, że SSLv3 jest wyłączony na serwerze. W przeciwnym razie połączenie zostanie pomyślnie nawiązane.
Alternatywnie możesz użyć nmap do przeskanowania serwera w poszukiwaniu obsługiwanej wersji:
# nmap --script ssl-enum-ciphers example.com Uruchamianie Nmap 6.47 (http://nmap.org) o 2014-10-15 03:19 PDTN Raport skanowania mapy dla example.com (203.0.113.100) Host jest włączony (Opóźnienie 0,090 s) .rDNS rekord dla 203.0.113.100: edge.example.com Nie pokazano: 997 filtrowanych portów USŁUGA STANU PORTU80 / tcp otwarte http443 / tcp otwarte https | ssl-enum-ciphers: | ** SSLv3: nie znaleziono obsługiwanych szyfrów ** | TLSv1.0:
Na marginesie możesz użyć nmap
ze skryptem ssl-enum-ciphers w następujący sposób
nmap --script ssl-enum-ciphers -p 443 przykład .com
Otrzymasz taką odpowiedź.
PORT STATE SERVICE443 / tcp open https | ssl-enum-ciphers: | SSLv3: | szyfry: | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - silny | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - silny | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - silny | TLS_RSA_WITH_RC4_128_MD5 - silny | TLS_RSA_WITH_RC4_128_SHA - silny | sprężarki: | NULL | TLSv1.0: | szyfry: | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - silny | TLS_RSA_WITH_RC4_128_MD5 - silny | TLS_RSA_WITH_RC4_128_SHA - silny | sprężarki: | NULL | TLSv1.1: | szyfry: | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - silny | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - silny | sprężarki: | NULL | TLSv1.2: | szyfry: | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - silny | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - silny | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - silny | sprężarki: | NULL | _ najmniej siła: mocna
Jak widać, zawiera listę wszystkich obsługiwanych wersji ssl / tls, a także zestawów szyfrów
Stworzyłem ten test pod kątem dostępności protokołu SSLv3. Prawdopodobnie istnieje lepszy sposób na wyszukanie ciągu, który pokazuje również, że szyfry CBC są w użyciu, ale większość ludzi po prostu chce wiedzieć, czy SSLv3 jest w ogóle dostępny.
Kilka rzeczy do zapamiętania:
skrypt:
dla ip w `awk '{print $ 1} '< allexternal.txt`; zrobić, jeśli gtimeout 30 openssl s_client -connect $ ip: 443 -ssl3 | grep -q 'Protokół: SSLv3'; następnie wykryto echo $ ip SSLv3 >> sslv3output; else echo $ ip SSLv3 NIE wykryto >> sslv3output; fi; gotowe
Jeśli tylko SSLv3 jest wyłączony, możesz także wymusić na openssl s_client
używanie tylko TLS:
openssl s_client -connect exmaple.com:443 -tls1 kod>
Warto zauważyć, że opcja -ssl3 w OpenSSL musi być teraz włączona w czasie kompilacji. Jeśli korzystasz z prekompilowanych plików binarnych, opcja może być niedostępna. Zobacz ten numer: https://github.com/openssl/openssl/issues/6801
Alternatywnym narzędziem jest testssl.sh. Sprawdza protokoły, szyfry i wybrane luki w zabezpieczeniach: https://github.com/drwetter/testssl.sh