Unieważnianie certyfikatów OpenVPN

Wyobraź sobie, że do wczoraj współpracował z Tobą John z firmy Contoso. Jako administrator VPNa nie przewidziałeś sytuacji, że John wywiąże się z umowy przed czasem i ustawiłeś mu czas ważności certyfikatu zgodnie z datą końca umowy na konfigurację serwerów, a certyfikat VPN jest ważny jeszcze ponad miesiąc. Na Twoje szczęście istnieje możliwość odcięcia dostępu do VPNa dla osób i urządzeń, których już z Wami nie ma.

Zrzut ekranu z logów OpenVPN z błędem "Odwołano certyfikat"
Zrzut ekranu z logów OpenVPN z błędem „Odwołano certyfikat”

Ratunkiem jest odwoływanie certyfikatów

Istnieje coś takiego jak odwoływanie certyfikatów nazywane również unieważnianiem. Proces ten polega na unieważnieniu wcześniej podpisanego certyfikatu, co uniemożliwi uwierzytelnienie się nim w konkretnym systemie, np. SSH lub VPN.

Kiedy najczęściej korzystamy z unieważniania certyfikatów

Najczęstszymi powodami, dla których korzystamy z tej procedury są:

  • Klucz prywatny skojarzony z certyfikatem został skompromitowany
  • Użytkownik zaszyfrowanego klucza prywatnego zapomniał hasła do klucza (dotyczy scenariuszy z dodatkowym zabezpieczeniem hasłem)
  • Chcesz zakończyć dostęp użytkownika do usługi, np. VPN

Powyższa lista zawiera interesujący nas powód, czyli zakończenie dostępu.

John twierdził, że skończył projekt, więc po co dalej korzysta z VPNa?
John twierdził, że skończył projekt, więc po co dalej korzysta z VPNa?

Zaraz John z Contoso się zdziwi jak nie będzie w stanie połączyć się z naszą siecią 😉

Oto co należy zrobić, aby odciąć Johna od naszej sieci

  1. Korzystając ze swojego ulubionego klienta SSH połącz się z systemem, na którym jest zainstalowane CA.
  2. W zależności od uprawnień na jakich działasz w obrębie CA, może być wymagane podwyższenie uprawnień. W tym celu przeloguj się na roota:
    $ sudo su
  3. Przejdź do katalogu zarządzania Twoim CA, w testowym przypadku jest to katalog /nap-ca:
    # cd /nap-ca
  4. W celu odwołania certyfikatu Johna wykonaj polecenie (zamiast john@contoso.com możesz wpisać inną nazwę certyfikatu):
    # ./easyrsa revoke john@contoso.com
  5. W przypadku pytania czy wiesz co robisz odpowiedz twierdząco yes
    Przykład komunikatu z pytaniem czy chcesz kontynuować
    Przykład komunikatu z pytaniem czy chcesz kontynuować
  6. Wygeneruj listę odwołanych klientów:
    # ./easyrsa gen-crl
  7. Wyświetl wygenerowaną listę clr.pem i skopiuj jej treść do zewnętrznego pliku lub schowka:
    # less ./pki/crl.pem
Przykładowy plik crl.pem
Przykładowy plik crl.pem

Kolejnym etapem będzie przeniesienie listy odwołanych certyfikatów do serwera OpenVPN. W naszym scenariuszu CA i serwer OpenVPN działają w dwóch odizolowanych od siebie systemach, dlatego musimy posłużyć się zewnętrznym schowkiem. Jeśli łączysz się z obiema systemami wykorzystując klienta SSH, do tego celu możesz wykorzystać schowek systemu operacyjnego.

  1. Korzystając ze swojego ulubionego klienta SSH połącz się z systemem, na którym jest zainstalowany serwer OpenVPN.
  2. Przeloguj się na roota:
    $ sudo su
  3. Przejdź do katalogu konfiguracyjnego serwera OpenVPN:
    # cd /etc/openvpn
  4. Otwórz do edycji plik ./crl.pem
    # nano ./crl.pem
  5. W wyświetlonym edytorze wklej zawartość pliku crl.pem, który wygenerowałeś na CA. Zapisz i zamknij edytor.
  6. Otwórz do edycji plik ./server.conf
    # nano ./server.conf
  7. W otwartym edytorze zlokalizuj linię:
    crl-verify crl.pem
    Jeśli podana linia jest zakomentowana to ją odkomentuj. Jeśli jej nie ma to dodaj ją ręcznie.
  8. Zrestartuj usługę OpenVPN, aby odłączyć podłączonego Johna:
    # service openvpn restart
  9. Możesz jeszcze sprawdzić logi, aby zweryfikować czy i kiedy John został odłączony od VPNa:
    $ less /var/log/openvpn/openvpn.log | grep john

Co na to John?

Podczas restartu usługi OpenVPN wszystkie klienty na chwilę zostały rozłączone, ale tylko klient Johna nie mógł się ponownie podłączyć do naszej sieci.

Klient OpenVPN Johna nie może połączyć się z serwerem OpenVPN
Klient OpenVPN Johna nie może połączyć się z serwerem OpenVPN

W logach zauważymy, że po restarcie serwera, John nie może się połączyć z powodu unieważnionego certyfikatu:

Fragment logów pokazujący brak możliwości podłączenia się przez Johna do VPNa
Fragment logów pokazujący brak możliwości podłączenia się przez Johna do VPNa
Zdziwiony John po odcięciu go od VPNa
Zdziwiony John po odcięciu go od VPNa