Jak mogę pobrać certyfikat bezprzewodowego punktu dostępowego za pomocą 802.1X?

11

O ile rozumiem, bezprzewodowe punkty dostępowe korzystające z WPA-Enterprise (tj. WPA plus 802.1X) mogą wysyłać certyfikat klucza publicznego do klienta podczas konfiguracji połączenia. Klient może zweryfikować ten certyfikat, aby upewnić się, że nie łączy się on z nieuczciwym AP (podobnie jak w przypadku sprawdzania poprawności certyfikatu w HTTPS).

Pytania:

  • Czy zrozumiałem to poprawnie?
  • Jeśli tak, czy istnieje sposób na pobranie certyfikatu AP? Idealnie chciałbym rozwiązanie działające pod Linuksem.

Chciałbym pobrać samopodpisany certyfikat, aby użyć go do weryfikacji kolejnych prób połączenia. Byłoby to prostsze niż proszenie operatora AP o plik.

Śleske
źródło
Nie znam narzędzia specjalnie do pobierania i zapisywania certyfikatu, ale widać to wyraźnie, więc możesz przechwycić je za pomocą Wireshark lub tcpdump. Wydaje mi się, że pamiętam dane certyfikatów w dziennikach debugowania / pełnych raportów wpa_supplicant, więc możesz na to również spojrzeć. Każde z tych podejść może wymagać trochę mungowania danych, aby uzyskać je z formularza pcap / log do odpowiedniego pliku .cer X.509.
Spiff,

Odpowiedzi:

11

Tak, najczęstsze konfiguracje WPA-Enterprise używają PEAP lub TTLS, obie implementują TLS przez EAP przez 802.1X.

Zwykle certyfikat jest już gdzieś publikowany przez operatorów sieci właśnie w tym celu. To nie jest coś, o co użytkownik powinien poprosić .

Niestety wpa_supplicant nie ma opcji zrzucania certyfikatów nawet w trybie debugowania. (Zaktualizuję to, jeśli znajdę lepszy sposób.) Nadal jednak możesz monitorować faktyczny proces uwierzytelniania EAPOL. Najpierw zainstaluj Wireshark.

Po odłączeniu uruchom interfejs ręcznie i rozpocznij przechwytywanie:

$ sudo ip link set wlan0 up
$ wireshark -ki wlan0 &

Uruchom wpa_supplicant, a wkrótce zobaczysz uzgadnianie TLS:

Serwer wyśle ​​swoje certyfikaty natychmiast po ServerHello. Wybierz pierwszy taki pakiet, a następnie kop w:

802.1X
└─Extensible Authentication Protocol
  └─Secure Sockets Layer
    └─Handshake Protocol: Certificatte
      └─Certificates

Kliknij prawym przyciskiem myszy pierwsze wystąpienie „Certyfikatu ( rzeczy )” i wybierz „Eksportuj wybrane bajty pakietów”. Wireshark zapisze go jako plik w binarnym formacie DER. Powtórz to dla wszystkich innych certyfikatów. Najwyższy (serwer RADIUS) zawiera informacje, które można skonfigurować altsubject_match; ostatni (główny urząd certyfikacji) należy przekazać wpa_supplicant as ca_cert.

Teraz masz kilka *.crtlub *.derpliki w formacie binarnym DER. Konwertuj je na format „tekstowy” PEM:

openssl x509 -inform DER < mycert.der > mycert.pem

(Jeśli Twój wpa_supplicant używa OpenSSL jako modułu obsługi TLS, musisz nadać mu certyfikat „głównego urzędu certyfikacji”; nadanie mu certyfikatu serwera nie będzie działać.

Uwaga: możliwe jest również, że ostatni certyfikat widziany w Wireshark nie będzie z głównego urzędu certyfikacji, ale wystawiony tylko przez jeden z głównych urzędów certyfikacji w /etc/ssl/certskatalogu ... W takim przypadku należy również ustawić domain_suffix_match- w przeciwnym razie używanie publicznych urzędów certyfikacji byłoby niepewne (802.1X niestety nie wie, przed jaką „nazwą hosta” sprawdzić, jak np. HTTPS).

użytkownik1686
źródło
Dziękuję za szczegółowy opis. Brzmi to trochę skomplikowane; ale jeśli jest to najprostszy sposób, spróbuję.
sleske,
Tak, to naprawdę działało, pobrałem echan EAP, tpcpdumpale działało jak urok. Zabawne, ale mój strumień miał tylko jedno
wpisowe
W moim przykładzie wiadomość TLS jest podzielona na wiele pakietów EAP, ponieważ jest zbyt duża (szczególnie jeśli wysyła kilka dużych certyfikatów RSA). Jednak zawsze jest to tylko jeden serwer TLS.
user1686
Proszę o wyrozumiałość, jeśli mówię coś niepoprawnego. Koniecznością takiego działania jest pobranie certyfikatu i zastosowanie go na urządzeniach, które nie pozwalają na pobranie i zaakceptowanie certyfikatu przy pierwszym połączeniu.
Mauro