Jak zweryfikować odcisk certyfikatu VPN przez odrębny kanał
Odcisk dowodzi tożsamości tylko wtedy, gdy oczekiwana wartość przychodzi kanałem, którego atakujący nie kontroluje. Przeprowadź sprawdzenie w tej kolejności.
Odcisk jest tylko tak dobry jak kanał, który powiedział ci, czego się spodziewać. Jeśli porównywana wartość przyszła tym samym połączeniem, które testujesz, porównanie nie dowodzi niczego poza tym, że strona kontrolująca to połączenie jest konsekwentna. Sprawdzenie musi przebiegać w ustalonej kolejności, a nieudany krok powinien cię zatrzymać, a nie popychać do następnego. Oto kolejność, której używam, gdy klient VPN zgłasza, że certyfikat się zmienił.
Nazwij obiekt, zanim nazwiesz wartość
Zdecyduj, czy oczekiwana wartość należy do certyfikatu liścia serwera, do wystawiającego CA, czy do klucza publicznego wewnątrz liścia. To trzy różne sprawdzenia i zawodzą na różne sposoby. Pasujący odcisk CA nie przypina serwera, a hash klucza publicznego celowo przeżywa ponowne wydanie, które zachowuje ten sam klucz.
Zapisz także algorytm. SHA-256 to dziś normalne oczekiwanie, ale starsze narzędzia drukowały SHA-1, jeśli nie poprosiłeś o coś innego, a 40-znakowa wartość szesnastkowa to znak, że zaraz porównasz dwie różne rzeczy.
Pobierz oczekiwaną wartość drugim kanałem
Drugi kanał musi być taki, do którego strona, przed którą się chronisz, nie może pisać. System zaopatrzenia, w którym już się uwierzytelniasz, wydruk w sejfie, baza konfiguracji albo podpisany dokument dostarczony przez inny proces, wszystkie się nadają. Wiadomość na czacie od kolegi, strona wsparcia osiągnięta przez wynik wyszukiwania i cokolwiek wklejone do terminala, w którym już debugujesz, nie nadają się.
Proś o pełną wartość i algorytm, nigdy o prefiks. Dwukropki i wielkość liter nie mają znaczenia, ale obcięcie zamienia sprawdzenie 256 bitów w zgadywankę.
Jeśli nikt nie potrafi podać oczekiwanej wartości z niezależnego źródła, uczciwym wynikiem jest to, że tego certyfikatu dziś nie da się zweryfikować. Powiedzenie tego jest lepsze niż przypięcie tego, co klient właśnie pokazał, co zamienia ostrzeżenie w nawyk.
Wyciągnij wartość po swojej stronie
Dla pliku certyfikatu polecenie to openssl x509 -in server.crt -noout -fingerprint -sha256. Jawny skrót ma znaczenie: bez niego wynik zależy od twojej wersji OpenSSL. Wynikiem jest ciąg szesnastkowy rozdzielony dwukropkami, więc usuń dwukropki i przed porównaniem zamień obie strony na małe litery.
Dla punktu końcowego mówiącego bezpośrednio TLS połącz się i wyprowadź certyfikat potokiem: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Działa to dla panelu administracyjnego sieci lub odbiornika TLS, nie dla OpenVPN, którego kanał sterujący znajduje się wewnątrz tunelu. Dla OpenVPN czytaj certyfikat z profilu na dysku, zamiast próbować przechwycić go z gniazda.
Porównanie powinno być mechaniczne. Znormalizuj obie wartości za pomocą tr -d ':' i ujednolicenia liter, a następnie porównaj cały ciąg. Porównywanie na oko to sposób, w jaki pasujący prefiks ukrywa różnicę w ostatnim bajcie. Jeśli ciągi się różnią, potraktuj różnicę jako rzeczywistą, zanim zaczniesz szukać wyjaśnienia.
Warunki zatrzymania
Zatrzymaj się, jeśli obiekt się różni, bo odcisk CA nie może oczyścić certyfikatu liścia, a liść nie może oczyścić CA. Zatrzymaj się, jeśli algorytm się różni, bo wartość SHA-1 porównana z wartością SHA-256 nic ci nie mówi. Zatrzymaj się, jeśli odcisk pasuje, ale certyfikat wygasł, został unieważniony lub wydano go na inną nazwę; pasujący hash nie jest sprawdzeniem ważności i nie naprawia zerwanego łańcucha. Zatrzymaj się także wtedy, gdy numer seryjny nie zgadza się z numerem seryjnym w rekordzie odniesienia, bo to najtańszy sposób zauważenia podmienionego certyfikatu.
Zatrzymaj się, jeśli nowa wartość przyszła kanałem, który testowałeś. Rotacja może zgodnie z prawem zmienić odcisk, ale wartość zastępcza nadal musi pochodzić z zaufanego procesu, a nie z okna ostrzeżenia, które wywołało pytanie.
Zatrzymaj się, jeśli sugerowaną poprawką jest wyłączenie weryfikacji nazwy hosta lub łańcucha. Odcisk dodaje ograniczenie do normalnych sprawdzeń; nie zastępuje ich, chyba że wdrożenie świadomie wybrało model wyłącznie z pinem, a ten wybór niesie własne koszty operacyjne.
Po porównaniu
Zapisz, co porównałeś, skąd pochodziła oczekiwana wartość i kiedy. Jeśli certyfikat wydano ponownie, zaktualizuj zapisane oczekiwanie tym samym zaufanym kanałem i zanotuj nowy numer seryjny, bo to numer seryjny czyni następną rotację audytowalną.
Potem bądź jasny co do granic. Odcisk potwierdza, że certyfikat, który masz, jest tym, którego ktoś kazał ci się spodziewać. Nie mówi nic o tym, czy host nie jest przejęty, ani o tym, czy usługa rejestruje lub ogranicza to, do czego ten certyfikat może dotrzeć.