Konfiguracja OpenVPN z Easy-RSA#
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Informacja
Ten przewodnik jest w trakcie tworzenia i będzie aktualizowany na bieżąco. Proszę wziąć ten status pod uwagę.
Ten przewodnik pokazuje jak skonfigurować klientów OpenVPN do logowania przy użyciu Nitrokey Pro 2 lub Nitrokey Storage 2. Do programowego zarządzania kluczami będziemy używać Easy-RSA, narzędzia, które rozwijało się wraz z OpenVPN.
To sign the certificates, we will use a Nitrokey HSM 2 set up as Certificate Authority, however this guide does not cover the set up of the CA itself (it is clear and well documented here).
Użyjemy Easy-RSA, ponieważ wydaje się zapewniać pewną elastyczność i pozwala na zarządzanie kluczami przez zewnętrzne PKI. Użyjemy go na serwerze, aby wystawić żądanie podpisania certyfikatu i powtórzymy ten sam proces na kliencie. Żądania podpisania certyfikatu zostaną podpisane przez CA na HSM Nitorkey, i ponownie przesłane do serwera i klienta.
Wymagania wstępne#
W poniższej dokumentacji będziemy potrzebować 3 różnych maszyn, jak poniżej:
Serwer OpenVPN (v. 2.5) na Debianie 10 (maszyna wirtualna EC2 - AWS)
Klient OpenVPN (v. 2.4.9) na Fedorze 30 (maszyna lokalna)
Urząd certyfikacji będzie dostępny z wolnostojącej maszyny z Fedorą 30 (maszyna lokalna).
Do interakcji z urządzeniami będziemy potrzebowali OpenSC 0.20 zainstalowanego na maszynie klienckiej i CA (maszyny lokalne). Możesz postępować zgodnie z instrukcjami, aby skonfigurować go w ` tym linku (*Unix) <https://github.com/OpenSC/OpenSC/wiki/Compiling-and-Installing-on-Unix-flavors>`__.
Aby pobrać zależności na maszyny Fedora możemy skorzystać z tej instrukcji:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Dla Debiana Linuxa, nowsze pakiety OpenSC są dostępne tutaj.
Do fizycznego zarządzania kluczami będziemy używać następujących Nitrokeys:
Klucz uwierzytelniający przy użyciu Nitrokey Pro 2 (pdf).
Urząd certyfikacji (CA) używający Nitrokey HSM 2 (pdf).
Dla przypomnienia, aby zbudować Urząd Certyfikacji na Nitrokey HSM 2, możesz postępować zgodnie z instrukcjami dostępnymi ` w dokumentacji <certificate-authority.html#sign-a-server-certificate>`_.
Alternatywnie możesz skonfigurować własny CA na na oddzielnej maszynie, lub użyć samouczka OpenVPN, który również opiera się na Easy-RSA. Ostatnie 2 opcje polegają na rozwiązaniach programowych do zarządzania kluczami.
Po stronie serwera#
1. Zainstaluj OpenVPN#
Najpierw musimy włączyć funkcję IP Forwarding poprzez edycję pliku
/etc/sysctl.conf
.$ editor /etc/sysctl.confUsunąć lub odpowiednio edytować następującą linię
net.ipv4.ip_forward=1Zamknij po zapisaniu i wprowadź następujące polecenie
$ sysctl -pPo wykonaniu przekierowania IP, będziemy musieli pobrać najnowsze wydanie OpenvPN dla naszego serwera Debian 10, zgodnie z ` tymi instrukcjami <https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos>`__:
Zmień nazwę na root i pobierz klucz GPG, który podpisał pakiet
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -Dodaj adresy URL odpowiednich pakietów OpenVPN do pliku
sources.list
.# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitŚciągnęliśmy OpenVPN 2.5, ponieważ „password prompt” wymaga przynajmniej OpenVPN version 2.4.8 do logowania.
Następnie pobieramy OpenVPN
$ sudo apt install openvpnJeśli chcesz sprawdzić wersję, jest to możliwe poprzez wywołanie
--version
i wypisanie następującego wyniku:$ sudo openvpn --version OpenVPN 2.5_beta3 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep 1 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10 Originally developed by James Yonan Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net> Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no \ enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=needless enable_fragment=yes enable_iproute2=yes \ enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes enable_maintainer_mode=no enable_management=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no \ enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no \ enable_shared=yes enable_shared_with_static_runtimes=no enable_silent_rules=no enable_small=no enable_static=yes enable_strict=no enable_strict_options=no \ enable_systemd=yes enable_werror=no enable_win32_dll=yes enable_x509_alt_username=yes with_aix_soname=aix with_crypto_library=openssl with_gnu_ld=yes \ with_mem_check=no with_sysroot=no
2. Zainstaluj Easy-RSA#
Aby zbudować PKI, pobierzemy najnowszą wersję Easy-RSA na maszyny serwerowe i klienckie. Aby uzyskać najnowsze wydanie, przejdź na stronę Releases na oficjalnym projekcie EasyRSA GitHub, skopiuj link do pobrania pliku kończącego się na
.tgz
, a następnie wklej go do poniższego polecenia:
Pobierz najnowszą wersję
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzWypakuj plik tarball
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Utwórz PKI dla serwera OpenVPN#
Przed utworzeniem klucza prywatnego i certyfikatu dla serwera OpenVPN należy utworzyć lokalny katalog Public Key Infrastructure na serwerze OpenVPN. Katalog ten będzie wykorzystywany do zarządzania żądaniami certyfikatów dla serwera i klientów, zamiast zgłaszania ich bezpośrednio na serwerze CA.
Aby zbudować katalog PKI na serwerze OpenVPN, będziesz musiał wypełnić plik o nazwie
vars
pewnymi domyślnymi wartościami.
Utwórz plik
vars
.$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsPo otwarciu pliku, wklej następujące dwie linie
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Są to jedyne dwie linie, których potrzebujesz w tym pliku
vars
na swoim serwerze OpenVPN, ponieważ nie będzie on używany jako Urząd Certyfikacji. Zapewnią one, że Twoje klucze prywatne i żądania certyfikatów są skonfigurowane tak, aby używać Elliptic Curve Cryptography (ECC) do generowania kluczy i bezpiecznych podpisów dla Twoich klientów i serwera OpenVPN.Jeśli chodzi o wybór algorytmów kryptograficznych, kieruję się wzorem z tego tutoriala, a Ty możesz je dostosować do swoich konkretnych potrzeb.
Inicjalizacja PKI
Po wypełnieniu pliku
vars
można przystąpić do tworzenia katalogu PKI. Aby to zrobić, należy uruchomić skrypt easyrsa z opcją init-pki:$ ./easyrsa init-pkiPo zainicjalizowaniu PKI na serwerze OpenVPN, możesz przejść do kolejnego kroku, którym jest utworzenie żądania certyfikatu serwera OpenVPN oraz klucza prywatnego.
4. Utwórz server.req
i server.key
.#
Teraz, gdy Twój serwer OpenVPN ma już zainstalowane wszystkie wymagania wstępne, następnym krokiem jest wygenerowanie pary kluczy składającej się z klucza prywatnego (do utrzymania w tajemnicy), oraz Certificate Signing Request (
.csr
) na Twoim serwerze OpenVPN.Ogólnie rzecz biorąc, w systemach, w których generujemy klucz i żądanie, pliki te pozostawiamy niezaszyfrowane, używając argumentu
nopass
, ponieważ serwery zazwyczaj muszą się uruchamiać bez podawania hasła. Generuje to niezaszyfrowany klucz, więc należy pamiętać o ochronie dostępu do niego i uprawnień do plików.Wskazówka
Notatki konfiguracyjne z OpenVPN:
- The server, and each client, must have their own cert and key
file. The server and all clients will use the same CA file.
Certyfikat serwera powinien posiadać następujące cechy:
keyUsage: digitalSignature, keyEncipherment
extendedKeyUsage: serverAuth
Tworzenie żądania podpisania dla serwera
Przejdź do katalogu
~/easyrsa
na serwerze OpenVPN jako użytkownik nieroot, i wprowadź następujące polecenia:$ cd easyrsa/ $ ./easyrsa gen-req server nopassSpowoduje to utworzenie klucza prywatnego dla serwera i pliku żądania certyfikatu o nazwie
server.req
.Po uzyskaniu podpisanego certyfikatu, należy go przesłać z powrotem na serwer OpenVPN.
Skopiuj klucz do katalogu serwera OpenVPN
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/Po wykonaniu tych kroków, udało Ci się utworzyć klucz prywatny dla Twojego serwera OpenVPN. Wygenerowany został również certyfikat Certificate Signing Request dla serwera OpenVPN.
Wskazówka
Rozszerzenia plików dla wniosków o podpisanie certyfikatu
Rozszerzenie pliku przyjęte przez samouczek CA i HSM wskazuje na tworzenie pliku
.csr
, jednak Easy-RSA tworzy żądania podpisania certyfikatu z rozszerzeniem.req
.Będziemy używać zamiennie obu rozszerzeń, jednocześnie upewniając się, że przekazujemy odpowiednie pliki do Urzędu Certyfikacji i generujemy końcowy certyfikat z rozszerzeniem
.crt
.W następnej części poradnika podpiszemy plik
.req
z naszym CA wdrożonym na urządzeniu HSM 2. W tym celu, użyję dedykowanej maszyny do podpisywania żądań.
5. Podpisz i odbierz server.crt
.#
Poniższe instrukcje wymagają przeniesienia pliku
server.req
(lubserver.csr
) do systemu CA.Sam transfer nie jest wrażliwy na bezpieczeństwo, choć dobrze jest sprawdzić, czy otrzymany plik odpowiada kopii nadawcy, jeśli transport jest niezaufany.
Aby przejść przez te kroki, będę w dużej mierze opierał się na tych instrukcjach, aby podpisać żądania podpisania certyfikatu, gdy już wygenerujemy je za pomocą Easy-RSA.
Podpisz plik
server.req
Na maszynie lokalnej przeznaczonej do dostępu do HSM, wykorzystamy narzędzia dostarczone przez Opensc 0.20 w celu podpisania pliku
.req
i odesłania go do serwera OpenVPN. Zakładamy, że plik został przesłany z serwera na maszynę CA.Najpierw zaczynamy od podłączenia HSM Nitrokey, i wpisania tej instrukcji do listy dostępnych klawiszy.
Zapytanie o listę dostępnych urządzeń
$ p11tool --list-all(Wymagany krok) Jeśli po raz pierwszy podpisujesz certyfikat z urzędem certyfikacji, możesz pobrać URI klucza prywatnego urzędu certyfikacji z HSM i dołączyć go do pliku konfiguracyjnego.
Informacja
URI klucza powinien być w tym formacie:
pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%E0%16%1C%C8%B6%F5%D6%6A%C6%83%5E%CD%EC%B6%23%FC%05%06%A6%75;object=root;type=privateUtwórz katalog
openvpn/
podcertificate-authority/
.$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Podpisać
server.req
.$ openssl ca -config sign_server_csrs.ini -engine pkcs11 -keyform engine -days 375 -notext -md sha512 -create_serial -in server.req -out /home/user/pki/issued/server.crtPobranie pliku
server.crt
na maszynę serwera
Prześlij podpisane certyfikaty na serwer
Z maszyny CA skopiuj pliki
server.crt
ichain.crt
na serwer OpenVPN. W tym przykładzie użyjemy poleceniascp
jak poniżej:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpUmieść certyfikaty w katalogu serwera
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverOstrzeżenie
Certyfikat CA i
chain.crt
W powyższym przypadku CA zwraca podpisany certyfikat sever i dołącza certyfikat CA
CA.crt
, który jest plikiemchain.crt
. Może to być zrobione przez niezabezpieczony kanał, ale klient jest zachęcany do potwierdzenia czy otrzymanychain.crt
jest ważny, jeśli transport jest niezabezpieczony.Możliwa jest zmiana nazwy pliku
chain.crt
naCA.crt
na maszynie docelowej, jednak w kolejnych instrukcjach będziemy używaćchain.crt
.
6. Skonfiguruj serwer OpenVPN#
Połączenie używające TLS wymaga wielu ` certyfikatów i kluczy do uwierzytelniania <https://wiki.teltonika-networks.com/view/OpenVPN_configuration_examples>`__. Teraz, gdy już je wystawiliśmy i podpisaliśmy, możemy umieścić je w odpowiednich katalogach. Podział certyfikatów i kluczy, które muszą znaleźć się w katalogu głównym jest następujący:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)Na swoim serwerze OpenVPN możesz teraz utworzyć plik konfiguracyjny
server.conf
za pomocą swojego ulubionego edytora tekstu. Plik może być skonfigurowany zgodnie z Twoimi potrzebami, a my zadbamy o to, aby zmienić sekcje certyfikatu i klucza serwera zgodnie z nazwami wybranymi przez Ciebie dla podpisanych przez nas plików:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keyOto plik konfiguracyjny, którego możemy użyć do przetestowania tych instrukcji:
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh.pem server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1 tls-version-min 1.2 # Lower boundary for TLS version tls-version-max 1.2 # Higher boundary for TLS versionAby sprawdzić, czy konfiguracja działa poprawnie, możemy użyć tej komendy:
$ sudo openvpn --server --config server.conf
7. Uruchomić usługę OpenVPN na serwerze#
Włącz usługę OpenVPN poprzez dodanie jej do systemctl, a następnie uruchom ją za pomocą tych poleceń:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverAby dwukrotnie sprawdzić, czy usługa OpenVPN jest aktywna, użyj tej komendy:
$ sudo systemctl status openvpn@serverW tym momencie OpenVPN powinien być uruchomiony.
Konfiguracja po stronie klienta#
1. Zainstaluj OpenVPN i Easy-RSA#
Zainstaluj oprogramowanie
Możemy użyć bezpośrednio
dnf install
, aby zainstalować OpenVPN 2.4.9 i Easy-RSA 3.0.7.$ sudo dnf install openvpn easy-rsaNastępnie tworzymy jako non-root katalog dla Easy RSA o nazwie
Easy-RSA
.$ mkdir ~/easyrsaI połącz go z pakietem Easy RSA, który właśnie zainstalowaliśmy
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Utwórz PKI dla klienta OpenVPN#
W ten sam sposób, w jaki stworzyliśmy PKI na serwerze OpenVPN, stworzymy PKI używając Easy-RSA po stronie klienta.
3. Utwórz client.req
i client.key
.#
W ten sam sposób, w jaki wydaliśmy parę kluczy na serwerze, generujemy parę kluczy dla klienta, która będzie się składać z pliku
client.req
oraz plikuclient.key
. Ten ostatni musi być utrzymywany w tajemnicy na maszynie klienta.
4. Podpisz client.req
i wystaw plik client.crt
.#
Aby przenieść plik
client.req
na maszynę CA, użyjemy tej samej metody, co w przypadku plikuserver.req
.Po przesłaniu, na maszynie CA podpiszemy plik z żądaniem podpisania certyfikatu tym poleceniem
$ openssl ca -config sign_server_csrs.ini -engine pkcs11 -keyform engine -days 375 -notext -md sha512 -create_serial -in client.req -out /home/user/pki/issued/client.crt
5. Zaimportuj client.crt
na Nitrokey z maszyny CA.#
Po utworzeniu pliku
client.crt
, podłączamy urządzenie Nitrokey Pro 2 do maszyny CA i importujemy plik.crt
do urządzenia Pro 2 za pomocą tego polecenia:$ pkcs15-init --store-certificate client.crt --id 3Możesz sprawdzić, czy klucz jest efektywnie przechowywany na Nitrokey za pomocą tego polecenia:
$ pkcs15-tool -cLub alternatywnie
$ pkcs11-tool --list-objectsWięcej poleceń można znaleźć na OpenSC wiki.
6. Pobierz plik chain.crt
z maszyny CA.#
My natomiast zachowujemy plik
client.crt
stored on the nitrokey Pro 2 device, we must retrieve thechain.crt
na maszynie klienta i przechowujemy go w odpowiednim katalogu. Możemy użyćscp
jak w metodzie wyjaśnionej w części serwerowej tego poradnika.
7. Skonfiguruj klienta do współpracy z Nitrokey#
Teraz z powrotem na komputerze klienckim podłączymy Nitrokey Pro i użyjemy go do ustanowienia połączenia VPN z serwerem. Ogólnie rzecz biorąc, połączenie, które używa TLS wymaga wielu certyfikatów i kluczy do uwierzytelnienia:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keyDla tego przewodnika możemy stworzyć następujący plik
client.conf
i dodać do niego wymagane opcje:client dev tun proto udp remote <server> 1194 resolv-retry infinite nobind user nobody group nobody persist-key persist-tun ca ca.crt remote-cert-tls server cipher AES-256-CBC verb 3 redirect-gateway def1 tls-version-min 1.2 # Lower boundary for TLS version tls-version-max 1.2 # Higher boundary for TLS version
Określ właściwy obiekt
Każdy dostawca PKCS#11 może obsługiwać wiele urządzeń. Aby wyświetlić listę dostępnych obiektów możesz użyć następującego polecenia:
$ openvpn --show-pkcs11-ids /usr/lib64/pkcs11/opensc-pkcs11.so The following objects are available for use. Each object shown below may be used as parameter to --pkcs11-id option please remember to use single quote mark. Certificate DN: CN=client Serial: E53DA75C5B8F1518F520BCEF0128C09F Serialized id: pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03Każda para certyfikat/klucz prywatny ma unikalny
Serialized id
ciąg znaków. Serializowany ciąg id żądanego certyfikatu powinien być określony w pliku konfiguracyjnym. Możemy to zrobić dodając opcjępkcs11-id
używając pojedynczego cudzysłowu.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Dodaj pobrany Serialized ID do pliku konfiguracyjnego
Używając swojego ulubionego edytora tekstu, otwórz plik server.conf i dodaj następujące linie, uważając, aby wstawić własne
Serialized id
:pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Dla dodatkowych ` ustawień związanych z uwierzytelnianiem OpenVPN <https://openvpn.net/community-resources/how-to/>`__, możesz również dodać kilka linii do obsługi zarządzania kluczami, chociaż jest to opcjonalne.
Informacja
Kliknij, aby zobaczyć kod
# nitrokey config pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03' # pkcs11-pin-cache 300 # daemon # auth-retry nointeract # management-hold # management-signal # management 127.0.0.1 8888 # management-query-passwords pkcs11-cert-private 1 # Prompt for PINKrok opcjonalny
Jeśli potrzebujesz przetestować konfigurację, z i bez tokena na Nitrokey, możesz dodać linie do tego samego
client.conf
i skomentować/odkomentować odpowiednie linie zgodnie z Twoimi potrzebami:Informacja
Kliknij, aby zobaczyć kod
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1Konfiguracja klienta OpenVPN
Końcowy plik konfiguracyjny
client.conf
powinien wyglądać tak jak ten:client dev tun proto udp remote <server> 1194 resolv-retry infinite nobind user nobody group nobody persist-key persist-tun ca ca.crt remote-cert-tls server cipher AES-256-CBC verb 3 redirect-gateway def1 tls-version-min 1.2 # Lower boundary for TLS version tls-version-max 1.2 # Higher boundary for TLS version # nitrokey login pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03' # pkcs11-pin-cache 300 # daemon # auth-retry nointeract # management-hold # management-signal # management 127.0.0.1 8888 # management-query-passwords pkcs11-cert-private 1 # Prompt for PIN # OR # non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1Configure OpenVPN (Windows only)
Aby ustanowić uścisk dłoni, należy skonfigurować OpenSSL zawarty w OpenVPN.
Utwórz katalog
ssl
wC:\Program Files\OpenVPN
i utwórz plikopenssl.cnf
z następującą zawartością :openssl_conf = default_conf
[default_conf ] ssl_conf = ssl_sect
[ssl_sect ] system_default = ssl_default_sect
[SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocol = TLSv1.2 MinProtocol = TLSv1.2
Dzięki tej modyfikacji nie wystąpi błąd zgłoszony tutaj, tutaj i tutaj.
Znane problemy
Istnieją pewne znane problemy związane z logowaniem OpenVPN za pomocą OpenSC. Proszę zapoznać się z tymi problemami ` tutaj <https://github.com/Nitrokey/wiki/wiki/3rd-Party-Issues>`__.
8. Uruchom klienta OpenVPN#
Uruchom usługę OpenVPN na kliencie
Włącz usługę OpenVPN i uruchom ją za pomocą tych poleceń:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.serviceAby dwukrotnie sprawdzić, czy usługa OpenVPN jest aktywna, użyj tej komendy:
$ sudo systemctl status openvpn-server@server.serviceWprowadź swój kod PIN użytkownika
Podczas uruchamiania klienta OpenVPN należy wprowadzić PIN Nitrokey:
$ sudo openvpn --client --config client.conf Fri Sep 11 17:42:01 2020 OpenVPN 2.4.9 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 24 2020 Fri Sep 11 17:42:01 2020 library versions: OpenSSL 1.1.1g FIPS 21 Apr 2020, LZO 2.08 Fri Sep 11 17:42:01 2020 PKCS#11: Adding PKCS#11 provider '/usr/lib64/pkcs11/opensc-pkcs11.so' Enter User PIN (OpenPGP card) token Password: ******Ostrzeżenie
Unfortunately OpenVPN doesn’t seem to be able to establish a handshake on some operating systems and stops at an error as reported here, here and here
This is what the error output looks like: $ sudo openvpn --client --config client.conf Fri Sep 11 17:42:01 2020 OpenVPN 2.4.9 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 24 2020 Fri Sep 11 17:42:01 2020 library versions: OpenSSL 1.1.1g FIPS 21 Apr 2020, LZO 2.08 Fri Sep 11 17:42:01 2020 PKCS#11: Adding PKCS#11 provider '/usr/lib64/pkcs11/opensc-pkcs11.so' Enter User PIN (OpenPGP card) token Password: ******`` Fri Sep 11 17:42:12 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]18.157.180.240:1194`` Fri Sep 11 17:42:12 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]`` Fri Sep 11 17:42:12 2020 UDP link local: (not bound) Fri Sep 11 17:42:12 2020 UDP link remote: [AF_INET]18.157.180.240:1194 Fri Sep 11 17:42:12 2020 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay Fri Sep 11 17:42:12 2020 TLS: Initial packet from [AF_INET]18.157.180.240:1194, sid=d79690cf 9e38ce89 Fri Sep 11 17:42:12 2020 VERIFY OK: depth=1, CN=server_CA Fri Sep 11 17:42:12 2020 VERIFY KU OK Fri Sep 11 17:42:12 2020 Validating certificate extended key usage Fri Sep 11 17:42:12 2020 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication Fri Sep 11 17:42:12 2020 VERIFY EKU OK Fri Sep 11 17:42:12 2020 VERIFY OK: depth=0, CN=server Fri Sep 11 17:42:12 2020 OpenSSL: error:141F0006:SSL routines:tls_construct_cert_verify:EVP lib Fri Sep 11 17:42:12 2020 TLS_ERROR: BIO read tls_read_plaintext error Fri Sep 11 17:42:12 2020 TLS Error: TLS object -> incoming plaintext read error Fri Sep 11 17:42:12 2020 TLS Error: TLS handshake failed Fri Sep 11 17:42:12 2020 SIGUSR1[soft,tls-error] received, process restarting Fri Sep 11 17:42:12 2020 Restart pause, 5 second(s)W niektórych zgłoszonych przypadkach nie pojawia się monit o PIN na terminalu. Jednym z obejść byłoby użycie tej komendy do zalogowania się za pomocą PINu:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Alternatywnie, możesz ` przekompilować klienta OpenVPN <https://forums.openvpn.net/viewtopic.php?f=4&t=23318>`__ z wyłączoną obsługą systemd, i będzie on pytał o PIN zgodnie z oczekiwaniami.
Inną opcją jest zalogowanie się do instancji OpenVPN za pomocą klienta Viscosity, który zapewnia lepsze doświadczenie użytkownika, zwłaszcza przy wprowadzaniu kodu PIN.