Dwa profile dostarczają plik o nazwie ca.crt, jeden tunel wstaje, a drugi zawodzi z błędem łańcucha. Otwieranie obu plików obok siebie rzadko to rozstrzyga, a wyłączenie weryfikacji rozstrzyga to w złym kierunku. Pytanie, które błąd naprawdę zadaje, jest węższe: który certyfikat każdy proces ładuje jako swoją kotwicę zaufania i czy oba są tym samym obiektem? Odpowiedz na to najpierw, a reszta diagnozy dostanie kierunek. Nazwa pliku to etykieta opakowania, a ścieżka zapisana w profilu też nie jest wiążąca, więc wszystko zależy od tego, co proces naprawdę czyta.

Znajdź certyfikat, który klient naprawdę ładuje

OpenVPN akceptuje urząd w dwóch formach, a forma decyduje, które bajty się liczą. Profil może wskazać plik zewnętrzny przez ca albo osadzić certyfikat w bloku <ca> w samym profilu. Gdy istnieją oba, wygrywa blok osadzony, a plik obok profilu nigdy nie jest otwierany.

Przeczytaj zawodzący profil i ustal, której formy używa, zanim cokolwiek porównasz. Kopia pobrana z sąsiedniego katalogu albo z pakietu, z którego pochodzi drugi profil, nie mówi nic o tym, czemu ufa ten proces. To samo dotyczy ścieżki w konfiguracji: jest rozwiązywana względem miejsca, w którym uruchomiono klienta, a to nie zawsze jest katalog, na który patrzysz. Czytaj profil, nie folder.

Certyfikaty identyfikuje się po zawartości: klucz publiczny, podmiot i wystawca, okno ważności oraz podpis nad tym wszystkim. Dwa pliki o identycznych bajtach to ten sam certyfikat, jakkolwiek się nazywają, a dwa pliki o tej samej nazwie mogą być niepowiązanymi urzędami. Nazwa to etykieta opakowania, nie tożsamość.

Zrób odcisk obu kopii za pomocą openssl

Odcisk to hash po kodowaniu DER certyfikatu, czyli formie, którą obejmuje podpis, więc końce wierszy i tekst nagłówka nie mogą na niego wpłynąć. Oblicz go dla każdego pliku i masz dwa oddzielone dwukropkami ciągi szesnastkowe, które albo się zgadzają, albo nie. Aby odpowiedzieć na pytanie porównania, nie trzeba czytać niczego więcej w certyfikacie.

openssl x509 -in /etc/openvpn/office/ca.crt -noout -fingerprint -sha256
openssl x509 -in ~/profiles/lab-ca.pem -noout -fingerprint -sha256

Kuszące jest skierowanie openssl na sam profil, ale odczytuje on pierwszy blok certyfikatu, który pojawia się w pliku, a profil zwykle zawiera <cert> przed <ca>. Wyodrębnij blok urzędu, a potem zrób odcisk wyodrębnionego pliku, bo to jest kopia, której klient naprawdę użyje.

sed -n '/^<ca>$/,/^<\/ca>$/p' office.ovpn | sed '1d;$d' > /tmp/office-ca.pem
openssl x509 -in /tmp/office-ca.pem -noout -fingerprint -sha256

Identyczne odciski oznaczają, że materiał zaufania jest ten sam, a błąd łańcucha ma inną przyczynę, co jest innym dochodzeniem. Różne odciski oznaczają różne certyfikaty, i tam zaczyna się następna sekcja.

Przeczytaj niezgodność, zanim założysz atak

Różne odciski oznaczają różne certyfikaty i nic więcej. Ponowne wydanie, rotacja, przemianowany urząd albo nieaktualny pakiet dają różne pliki o całkowicie legalnych historiach. Który należy do wdrożenia, jest pytaniem do operatora lub rejestru wdrożenia, a nie do czasu modyfikacji pliku. Archiwa kopiują znaczniki czasu, więc nowszy plik nie jest automatycznie właściwą kotwicą.

Korzeń, który podpisuje sam siebie, jest normalny, więc znalezienie go nie jest dowodem problemu. Zadaniem weryfikatora jest zbudowanie ścieżki od certyfikatu serwera do kotwicy, którą mu przekazano, a błąd łańcucha zwykle oznacza, że tej ścieżki nie udało się ukończyć.

Sprawdź, czy kotwica zawodzącego profilu to urząd, z którego wdrożenie nadal wystawia certyfikaty. Jeśli odcisk nie pasuje do niczego w rejestrze wdrożenia, profil jest po prostu nieaktualny i żadne dostrojenie po stronie klienta tego nie naprawi.

Napraw zaufanie bez wyłączania weryfikacji

Krótkoterminową poprawką jest wyłączenie weryfikacji albo dodanie każdego certyfikatu w łańcuchu jako kotwicy. Jedno i drugie sprawia, że komunikat znika, i jedno i drugie zmienia, które serwery klient będzie odtąd akceptował. Włącz weryfikację z powrotem, zainstaluj zamierzoną kotwicę i przetestuj ponownie.

Jeśli łańcuch teraz się buduje, ale pojawia się inny błąd, to postęp: weryfikacja nazwy, daty ważności i unieważnienie to osobne kontrole z osobnymi komunikatami. Trzymaj parę odcisków i pierwotny tekst błędu razem w zgłoszeniu, aby następna osoba widziała, która kotwica została załadowana, a której oczekiwano. Para odcisków jest dość mała, by wkleić ją do notatki przekazania, a następne wystąpienie zajmuje wtedy pięć minut zamiast popołudnia.

Uzyskaj właściwy urząd tym samym uwierzytelnionym kanałem, który dostarczył profil. Wyciąganie certyfikatu z serwera, bo jego podmiot wygląda znajomo, to inna czynność i po cichu poszerza to, czemu klient będzie ufał.

Powiązane artykuły