Litery w objaśnieniu RSA nazywają pola wewnątrz jednego obiektu, a nie pliki, które wydaje narzędzie PKI. Plik klucza prywatnego zawiera strukturę, której pierwsze pola są publiczne, a późniejsze nigdy nie mogą opuścić maszyny kończącej tunel. Między tymi dwoma faktami leży większość praktycznych pytań o to, który plik odpowiada na które pytanie. Ten przewodnik czyta najpierw strukturę, a potem polecenia, które ją badają, nie rozlewając jej.

Zanim zaczniesz szukać liczb pierwszych, potwierdź, że klucz jest RSA

Certyfikat dowodzi, że jakiś klucz istnieje i został podpisany; nie dowodzi, że klucz jest RSA. Systemy można budować na krzywych eliptycznych lub Ed25519, a ten sam układ katalogów obsługuje je wszystkie. Sprawdź algorytm, zanim zaczniesz szukać czynników pierwszych, których nigdy tam nie było.

Te trzy polecenia tylko do odczytu odpowiadają na pytanie i zapisują wersję narzędzia.

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

Wersja ma znaczenie, bo nazwy opcji przesuwały się między wydaniami głównymi. W wynikach certyfikatu znajdź wiersz algorytmu klucza publicznego i rozmiar klucza; w wynikach klucza klucz RSA wypisuje moduł i wykładnik publiczny. Klucz na krzywej eliptycznej wypisuje zamiast tego nazwaną krzywą, a żadne wyszukiwanie nie wydobędzie z niego n ani q.

Czytaj strukturę zamiast base64

PEM to base64 owinięty w wiersze nagłówka, a jego dekodowanie daje DER, czyli strukturę serializowaną, a nie jedną ogromną liczbę całkowitą. Prywatne klucze RSA podróżują w dwóch typowych kontenerach, PKCS#1 i PKCS#8, i oba sprowadzają się do tego samego zbioru liczb.

W przypadku dwóch liczb pierwszych struktura prywatna niesie dziewięć pól: wersję, moduł n, wykładnik publiczny e, wykładnik prywatny d, liczby pierwsze p i q, dwa wykładniki CRT i współczynnik CRT. RFC 8017 sekcja A.1 definiuje te składniki i układ ASN.1, a także dopuszcza więcej niż dwie liczby pierwsze, dlatego ogólny parser może wypisać dodatkowe wpisy liczb pierwszych. Zwróć uwagę na kolejność, bo wyjaśnia ona częsty błąd: publiczna połowa jest przechowywana w pliku prywatnym, więc obecność pola publicznego nie czyni tego pliku bezpiecznym do udostępnienia. Wszystko po nim to materiał, który musi pozostać na hoście.

Kodowanie dodaje warstwę, którą łatwo pomylić z treścią. openssl asn1parse rysuje strukturę jako drzewo, dzięki czemu kolejność pól staje się widoczna, i nie odszyfrowuje niczego ani nie mówi, czy klucz jest użyteczny.

Dopasuj certyfikat do klucza bez drukowania klucza

Następne pytanie zwykle brzmi, czy certyfikat i klucz do siebie pasują. Porównanie modułów odpowiada na nie, ale kopiuje też materiał bliski prywatnemu do zapisu terminala, który może trafić do zgłoszenia. Porównanie publicznych połówek odpowiada na to samo pytanie bez niczego wrażliwego na ekranie.

openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH

Identyczne pliki oznaczają, że certyfikat niesie publiczną połowę tego klucza, a różnica oznacza, że trzymasz niewłaściwą parę. Ta niezgodność jest najczęstszą przyczyną tunelu, który wesoło negocjuje, a potem odmawia uwierzytelnienia. Następnie usuń dwa pliki tymczasowe; nie zawierają niczego tajnego, ale czysty katalog roboczy łatwiej przemyśleć w środku incydentu.

Wiedz, czym nie są sąsiednie pliki

Certyfikat nie jest zaszyfrowanym kluczem publicznym, który druga strona otwiera certyfikatem CA; to podpisane wiązanie między kluczem publicznym a danymi tożsamości. Prywatny klucz podpisujący CA pozostaje oddzielony od własnego certyfikatu i od każdego klucza klienta. Wniosek też nie jest certyfikatem: niesie żądane informacje i klucz publiczny z podpisem na wniosku, co czyni go danymi rejestracyjnymi, a nie dowodem uprawnienia.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

Dwa z tych wpisów są wystarczająco często mylone z parametrami RSA, by nazwać je dwa razy. Plik parametrów Diffie-Hellmana zawiera parametry grupy do ustalenia klucza i żadnych liczb pierwszych RSA, choć wypisuje się też jako duża liczba pierwsza. Lista unieważnień publikuje status certyfikatów i nie jest miejscem, w którym prywatny wykładnik mógłby się ukryć.

Dlatego każdy wiersz inwentarza powinien zapisywać cztery rzeczy: typ obiektu, właściciela, cel i to, czy uwzględniono materiał prywatny. Ostatnia kolumna decyduje, dokąd plik wolno kopiować, i właśnie ją ludzie pomijają.

Zapisz dopasowanie, a następnie zweryfikuj uścisk dłoni

Przed zmianą czegokolwiek zapisz wynik weryfikacji z datą i wersją OpenSSL. Późniejszą rotację można wtedy porównać z dowodami, a nie z pamięcią.

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Po porównaniu klucza publicznego przejdź ścieżkę, która zużywa parę: podnieś tunel, potwierdź, że certyfikat jest przedstawiany i akceptowany, i sprawdź, jaką tożsamość zapisała brama. Jeśli klucz i certyfikat pasują, a uwierzytelnienie nadal zawodzi, usterka leży w zaufaniu, mapowaniu tożsamości lub polityce dostępu, a nie w parze.

Do wycofania trzymaj poprzedni klucz i certyfikat w katalogu z datą i przywracaj oba razem, nigdy tylko jedno z dwóch. Klucz bez certyfikatu i certyfikat bez klucza zawodzą z zewnątrz tak samo, co czyni połowicznie przywrócone pary kosztownymi do rozplątania o drugiej w nocy.

Powiązane artykuły