Wydaje się naprawdę dziwne, że OpenSSL zostawiłby to dzwoniącemu.
Tak, bardzo problematyczne pominięcie w praktyce, ponieważ tak wiele aplikacji nie zdaje sobie sprawy, że musi ręcznie wykonać czek.
OpenSSL 1.1.0 będzie zawierać weryfikację nazwy hosta (teraz w HEAD
(stan na wrzesień 2013)). Zgodnie z dziennikami zmian dostępna jest opcja -verify_name
, a apps.c
odpowiada przełącznikowi -verify_hostname
. Ale s_client
nie odpowiada na żaden z przełączników, więc nie jest jasne, w jaki sposób sprawdzanie nazwy hosta zostanie zaimplementowane lub wywołane dla klienta.
Jeśli pole rozszerzenia subjectAlternativeName
dnsName
jest obecny, nazwa zestawu do tej wartości.
Może istnieć wiele alternatywnych nazw tematycznych (SAN), więc przygotuj się na więcej niż jeden.
W przeciwnym razie ustaw nazwę pola CN tematu.
Uważam, że trzeba to sprawdzić również w meczu.
porównania nazwy przed żądanego hosta, dzięki czemu każdy gwiazdka dopasować [A-Z 0-9 _] +, ale nie 'dot' (.).
To znacznie bardziej bolesne. Musisz także upewnić się, że nie pasujesz do gTLD lub ccTLD. Na przykład nie chcesz dopasowywać się do certyfikatu wystawionego przeciwko gTLD *.com
. Ten certyfikat został prawdopodobnie wydany przez złego faceta;)
ccTLD są jak * .eu, * .us lub இலங்கை (nic.lk). Jest ich około 5000, a Mozilla oferuje listę pod numerem http://publicsuffix.org/. Lista surowa to https://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1.
Wydaje mi się, że nie powinno być dużo kodu kopanie wokół zrobić to, ale nie znalazłem żadnego.
Oprócz sugestii van Gulika, możesz także spróbować Curl. Jestem całkiem pewien, że Curl zawiera kod pasujący do nazwy hosta.
Można nawet sprawdzić certyfikaty są dobrze uformowane. Grupą odpowiedzialną w kontekście sieci są fora CA/Browser. Mają wymogi podstawowe i rozszerzone do tworzenia certyfikatów:
W docs bazowych, można znaleźć, na przykład, IP wymienione jako nazwa zwyczajowa (CN) muszą być również wymienione w alternatywnych nazwach podmiotów (SAN).
W rozszerzonych dokumentach okaże się, że zarezerwowane adresy IP (RFC 1918) nie mogą być obecne w rozszerzonym certyfikacie walidacji (EV); i certyfikaty EV nie mogą zawierać symboli wieloznacznych.
Zamiast "ustawiania" wartości opartej na tym, co znajduje się w certyfikacie, powinieneś zrobić to na odwrót: sprawdź, czy to, co się spodziewasz, ma zgodny wpis DNS SAN. Wynika to z faktu, że w rozszerzeniu SAN może znajdować się wiele wpisów DNS. (W RFC 6125 są teraz bardziej precyzyjne reguły dotyczące dopasowywania symboli wieloznacznych) – Bruno