Dwa certyfikaty klienta z różnymi numerami seryjnymi, różnymi kluczami, a nawet różnymi pełnymi podmiotami wciąż mogą trafić do jednego pliku polityki, ponieważ serwer nie patrzy na nic z tego. Odczytuje nazwę z certyfikatu i otwiera odpowiedni plik konfiguracji klienta. Jeśli oba certyfikaty noszą tę samą nazwę, drugi dziedziczy politykę pierwszego w chwili połączenia.

Kolizja powstaje przy rejestracji i ujawnia się dopiero przy połączeniu, zwykle gdy urządzenie otrzyma adres lub zestaw tras należący do innej maszyny. Aby temu zapobiec, trzeba uzgodnić, które pole mapuje serwer, a następnie zarezerwować tę wartość, zanim cokolwiek zostanie podpisane.

Twoje narzędzia do certyfikatów nie ostrzegą cię, ponieważ unikalność w ramach X.509 i unikalność nazwy polityki OpenVPN to różne wymagania egzekwowane przez różne systemy.

Serwer szuka nazwy, nie odcisku palca

Przy zwykłym mapowaniu opartym na certyfikatach serwer bierze nazwę pospolitą z przedstawionego certyfikatu i szuka pliku o tej nazwie w swoim katalogu konfiguracji klientów. Ten plik może przypiąć statyczny adres, wypchnąć trasy lub zastosować znaczniki zapory dla każdego klienta. Wyszukiwanie to dopasowanie ciągu do nazwy pliku, więc wielkość liter, spacje i interpunkcja mają znaczenie.

Niektóre wdrożenia celowo zamieniają mapowanie, aby uwierzytelniona nazwa użytkownika przejęła nazwę pospolitą, i wtedy to nazwa użytkownika musi być unikalna. Tak czy inaczej, wartością wybierającą politykę jest wartość, którą rezerwujesz. Zdecyduj, która to jest, zanim cokolwiek wydasz; zgadywanie po kolizji kosztuje więcej niż pytanie.

Gdzie dwie instytucje spotykają się na tej samej nazwie

Organizacja, która przyjmuje certyfikaty od więcej niż jednej instytucji wydającej, prowadzi dwa niezależne procesy rejestracji piszące do jednej przestrzeni nazw. Własne zasady unikalności każdej instytucji obowiązują w jej obrębie, więc obie mogą legalnie wydać certyfikat na tę samą nazwę pospolitą, a żadna nie zauważy niczego niewłaściwego.

Numery seryjne nie pomagają. X.509 wymaga, aby numer seryjny był unikalny w zakresie jego wystawcy, co jest cechą księgowości tej instytucji, a nie globalną tożsamością urządzenia. Sprawdzenie podmiotu to także inny test niż sprawdzenie nazwy pospolitej: dwa certyfikaty mogą dzielić CN, a różnić się jednostką organizacyjną i dlatego nosić odrębne podmioty. Wszystkie te właściwości mogą zachodzić, a serwer wciąż mapuje oba certyfikaty na jedną nazwę pliku.

Dokumentacja OpenSSL CA omawia ustawienie unique_subject, które rządzi opinią jej własnej bazy danych, a uczciwym punktem wyjścia jest przeczytanie własnej konfiguracji wydawania, zamiast zakładania, że obowiązuje jakaś konkretna domyślna wartość EasyRSA lub OpenSSL.

Zarezerwuj efektywną nazwę przed podpisaniem

Prowadź rejestr, który mapuje urządzenie na jego zatwierdzony wpis, a stamtąd na dokładną nazwę pliku polityki, tak aby nazwa została przydzielona raz i pozostała przydzielona. Rezerwacja musi być atomowa, co w praktyce oznacza ograniczenie bazy danych lub blokadę wokół kroku przydziel-i-podpisz, a nie arkusz kalkulacyjny edytowany przez dwie osoby.

Następnie uczyń sprawdzenie częścią wydawania: odmów podpisania, gdy żądana nazwa już istnieje, i uwzględnij w tym sprawdzeniu każdą instytucję, której ufa serwer, ponieważ nazwa zarezerwowana przez drugą instytucję jest tak samo zajęta. Odrzucony wniosek z jasnym powodem jest tańszy niż zgłoszenie o urządzeniu, które ciągle dostaje cudzy statyczny adres.

Odnowienie celowo używa nazwy ponownie

Ponowne wydanie dla istniejącego urządzenia powinno dać nowy numer seryjny pod tą samą nazwą polityki, i to jest legalne ponowne użycie, a nie kolizja. Z góry trzeba zdecydować o nakładaniu się: czy stary i nowy certyfikat mogą być ważne jednocześnie, oraz jak stare poświadczenie jest wycofywane.

Nie sięgaj po duplicate-cn, aby to rozwiązać. Ta opcja serwera rządzi równoczesnymi połączeniami przedstawiającymi tę samą nazwę; nie blokuje rejestracji, a jej włączenie nie czyni jednego współdzielonego statycznego adresu bezpiecznym dla dwóch maszyn naraz. Unieważnienie zwykle identyfikuje certyfikat po wystawcy i numerze seryjnym, więc wycofanie starego poświadczenia nie musi unieważniać jego zamiennika, o ile serwer otrzymuje i egzekwuje właściwe dane unieważnienia.

Potwierdź mapowanie narzędziami na maszynie

Zanim przekażesz urządzeniu jego nowe poświadczenie, odczytaj nazwę z certyfikatu tak, jak zrobi to serwer, a następnie porównaj ją z plikiem polityki, którego wyboru oczekujesz.

openssl x509 -in device42.crt -noout -subject -nameopt sep_multiline
ls -l /etc/openvpn/ccd/device42
grep -n "duplicate-cn" /etc/openvpn/server.conf

Pierwsze polecenie wypisuje pola podmiotu osobno, co natychmiast uwidacznia zabłąkaną jednostkę organizacyjną lub podwójną spację. Drugie potwierdza, że plik polityki istnieje dokładnie pod tą nazwą, a trzecie pokazuje, czy serwer jest skonfigurowany do zezwalania na kilka sesji pod jedną nazwą. Uruchom wszystkie trzy na nowym certyfikacie, zanim opuści krok rejestracji, dopóki błąd kosztuje jeszcze podpis, a nie incydent. Zachowaj dane wyjściowe przy zgłoszeniu, aby następna osoba zobaczyła, jaką nazwę serwer faktycznie otrzymał.

Zakończ rzeczywistym połączeniem i porównaj przydzielony adres oraz wypchnięte trasy z plikiem polityki, a nie z tym, co zamierzałeś napisać. Jeśli dwa urządzenia zgłaszają ten sam statyczny adres, rejestr ma kolizję, której żadna inspekcja certyfikatów nigdy nie ujawni.

Powiązane artykuły