Szukam prostego sposobu, aby dowiedzieć się, czy serwer używa rozszerzenia SSL Server Name Indication do certyfikatu HTTPS na stronie internetowej. Metoda korzystająca z wiersza polecenia przeglądarki lub systemu Unix jest w porządku.
Dzięki!
SNI jest inicjowany przez klienta, więc potrzebujesz klienta, który go obsługuje. Jeśli nie masz Windows XP, Twoja przeglądarka zrobi to. Jeśli twój klient pozwala poprawnie debugować połączenia SSL (niestety, nawet polecenia CLI gnutls / openssl nie robią tego), możesz sprawdzić, czy serwer odsyła pole nazwa_serwera w rozszerzonym hello. Zauważ, że brak tego pola oznacza tylko, że serwer nie użył nazwy serwera w kliencie hello, aby pomóc wybrać certyfikat, a nie, że go nie obsługuje.
Tak więc w praktyce najłatwiejszym testem jest po prostu próba połączenia. W tym celu musisz znać dwie nazwy, które kończą się tym samym adresem IP, z którym można nawiązać połączenie ssl. https jest najłatwiejszy, ponieważ możesz po prostu przejrzeć obie nazwy i sprawdzić, czy masz odpowiedni certyfikat.
Istnieją trzy wyniki:
Nieco bardziej skomplikowanym testem, który da więcej informacji, jest otwarcie i przechwytywanie wireshark podczas przeglądania. Następnie możesz znaleźć odpowiednie pakiety, filtrując ssl.handshake. Poniższe zrzuty ekranu są przykładem pary hello / server hello, w której obsługiwany jest SNI:
Ponownie, oczywiście brak pola server_name na serwerze hello nie oznacza, że SNI nie jest obsługiwany. Tylko to, że podana przez klienta nazwa_serwera nie była używana przy podejmowaniu decyzji, którego certyfikatu użyć.
openssl
. Niektóre szczegóły są dostępne:openssl s_client -servername alice.sni.velox.ch -tlsextdebug -msg -connect alice.sni.velox.ch:443
Pewne wskazania do używania SNI podano podczas testu Qualys SSL .Jedną linijką, której prawdopodobnie szukasz do wykrycia obecności nagłówka rozszerzenia Wskazanie nazwy serwera SSL / TLS, jest:
gdzie
www.SERVERNAME.com
jest testowana wartość SNI iwww.YOURSERVER.com
nazwa domeny lub adres IP testowanego serwera obsługującego TLS.W wierszu poleceń używane
openssl
jest polecenie ss_client
(patrz s_client (1) ), aby połączyć się z serweremwww.YOURSERVER.com
na porcie443
. W-tlsextdebug
opcji można włączyć rozszerzenia TLS debugowania. Ta-servername
opcja informujes_client
program, aby przekazałwww.SERVERNAME.com
jako wartość pola SNI w pakiecie ClientHello podczas uzgadniania TLS.Wreszcie,
2>/dev/null
po prostu ukrywa wyjście stderr (które może być głośne), a| grep "server name"
potok filtruje standardowe wyjście, aby wyświetlić rozszerzenie TLS o nazwie „nazwa serwera” ws_client
wyjściu debugowania rozszerzenia TLS.Jeśli widzisz wiersz wyniku, taki jak
następnie serwer zwraca informacje nagłówka SNI w odpowiedzi ServerHello. Jeśli tego nie zrobisz, możliwe, że serwer albo nie obsługuje SNI, albo nie został skonfigurowany do zwracania informacji SNI, biorąc pod uwagę żądaną nazwę. W takim przypadku sprawdź dwukrotnie, czy używasz nazwy domeny w
-servername
opcji, o której serwer powinien odpowiedzieć z informacją SNI.źródło
-servername
czy nie.-servername sdfsdlkfjsdf23.somedomain.somewhere -connect realhost.somedomain.somewhere
=TLS server extension "server name" (id=0), len=0
(I takie same dane wyjściowe, jeśli pasują.) Jak sprawdzić, czy dane wyjściowe nie są zgodne z hostem na serwerze?-msg
oprócz powyższych parametrów i grep dla „Alert”. Jeśli-servername
coś jest nie tak, otrzymasz cośTLS 1.2 Alert ... warning unrecognized_name
z serwera. @Meitar Myślę, że jeśli dodasz to do odpowiedzi, będą przydatne dla innych osób.-msg
Przełącznik po prostu dodaje zrzut heksowy komunikatów protokołu TLS. Nie jest wymagane obserwowanie błędu uzgadniania TLS, więc dodanie odpowiedzi do tej odpowiedzi byłoby niepoprawne. Co więcej, takie błędy uzgadniania TLS są drukowane w STDOUT, co oznaczałoby,2>/dev/null
że trzeba by je usunąć z odpowiedzi, aby mogła zostać przetworzonagrep
w pierwszej kolejności. W rzeczywistości @bshea pyta: „Jak wykryć błędy TLS?” które jest zupełnie innym pytaniem niż pytanie „Czy ten serwer wykorzystuje funkcję SNI protokołu TLS?” który jest tutaj tematem.STDERR
do pliku tekstowego, nie dostaję tego błędu. Bez-msg
nie mogłem znaleźć innej opcji, która pokazuje wiadomości uścisku dłoni. (przy użyciu openssl 1.0.2q). Tak długo, jak istotna jest odpowiedź, możesz mieć rację.Możesz użyć
openssl
do pobrania i zapytania certyfikatu.openssl s_client -connect
openssl x509
grep
znaleźć informacje „DNS:”openssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:
Ostatni wiersz pokazuje wszystkie wpisy SNI obecne w certyfikacie:
źródło
DNS:...
wpisy na ostatniej linii pokazać wszystkich prawidłowych nazw SNI w certyfikacie.