
Shrew VPN – łączenie bez monitu o hasło
Popularny klient Shrew VPN w sytuacji gdy autentykacja tunelu odbywa się z wykorzystaniem certyfikatów, przed każdym połączeniem żąda podania hasła do klucza prywatnego użytkownika. Jest to istotny element podnoszący poziom bezpieczeństwa. W Shrew VPN w przeciwieństwie np. do TheGreenBow VPN nie ma możliwości zapamiętania tego hasła w programie.
Czasami użytkownicy chcieliby aby do nawiązania połączenia tunelowanego nie było potrzeby wpisania hasła. Dla przykładu w trybie Hybrid Mode użytkownik musi podać hasło do certyfikatu oraz poświadczenia użytkownika w bazie użytkowników (np. ActiveDirectory).
Najczęściej w przypadku autentykacji certyfikatem generujemy plik p12. Plik p12 jest kontenerem zawierającym klucz publiczny użytkownika (certyfikat), klucz prywatny użytkownika oraz klucz publiczny CA. Klucz prywatny użytkownika jest chroniony hasłem i właśnie to jest to hasło którego podania żąda Shrew VPN.
Konfiguracja klienta Shrew VPN została opisana w artykule.
Jeżeli usuniemy hasło chroniące klucz prywatny użytkownika Shrew VPN nie będzie monitował o hasło.
Powyższy screen pokazuje jakie klucze PKI są wymagane do autentykacji. Po kolei są to:
- Server Certificate Autority File – Certyfikat CA
- Client Certificate File – klucz publiczny użytkownika
- Client Private Key File – klucz prywatny użytkownika
zazwyczaj we wszystkich trzech polach wskazujemy plik p12. Robimy tak tylko dlatego, że plik p12 zawiera wszystkie potrzebne klucze. Z PKI Stormshield-a możemy wyeksportować zarówno sam certyfikat CA jak i certyfikat użytkownika (PEM) który zawiera klucz prywatny i publiczny użytkownika. Zakładam jednak, że dysponujemy plikiem p12, ostatecznie mogliśmy otrzymać taki plik ze źródła zewnętrznego.
Musimy wyodrębnić z pliku p12 poszczególne klucza a następnie usunąć hasło chroniące klucz prywatny. Do manipulacji kluczami korzystamy z oprogramowania OpenSSL. OpenSSL jest natywnym systemem crypto w Linuxie i Mac OSX ale można go zainstalować również w Windows. OpenSSL występuje również w systemie SNS, zatem poniższe operacje możemy przeprowadzić również na samym Stormshield-dzie.
Procedura
W przykładzie mamy do dyspozycji plik p12 z certyfikatem dla użytkownika (pawel_grzelewski.p12).
Krok 1
Wyodrębniamy certyfikat CA:
openssl pkcs12 -in pawel_grzelewski.p12 -out CA-Cert.pem -cacerts -nokeys
gdy wykonamy polecenie dostaniemu monit o hasło (podajemy hasło do p12), w wyniku działania komendy otrzymujemy plik CA-Cert.pem zawierający certyfikat CA.
Krok 2
Wyodrębniamy klucz publiczny (certyfikat) użytkownika:
openssl pkcs12 -in pawel_grzelewski.p12 -out pawel_grzelewski_cert.pem -clcerts -nokeys
gdy wykonamy polecenie dostaniemu monit o hasło (podajemy hasło do p12), w wyniku działania komendy otrzymujemy plik pawel_grzelewski_cert.pem zawierający klucz publiczny użytkownika.
Krok 3
Wyodrębniamy klucz prywatny użytkownika:
openssl pkcs12 -in pawel_grzelewski.p12 -out pawel_grzelewski_key.pem -nocerts
gdy wykonamy polecenie dostaniemu monit o hasło (podajemy hasło do p12) a następnie prośbę o podanie hasła jakim zostanie ochroniony klucz prywatny (podajemy dowolny ciąg znaków np. 1234), w wyniku działania komendy otrzymujemy plik pawel_grzelewski_key.pem zawierający klucz prywatny użytkownika.
Krok 4
Usuwamy hasło chroniące klucz prywatny:
openssl rsa -in pawel_grzelewski_key.pem -out pawel_grzelewski_key_nopass.pem
gdy wykonamy polecenie dostaniemu monit o hasło (podajemy hasło do klucza prywatnego z kroku 3), w wyniku działania komendy otrzymujemy plik pawel_grzelewski_key_nopass.pem zawierający klucz prywatny użytkownika. Klucz prywatny nie jest chroniony hasłem.
Wyodrębnione plik wybieramy odpowiednio w konfiguracji ShrewVPN. Polecenie złożenia tunelu nie będzie skutkowało monitem o podanie hasła.