Configurarea OpenVPN cu Easy-RSA#
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Notă
Acest ghid este în curs de realizare și va fi actualizat în funcție de evoluția sa. Vă rugăm să țineți cont de acest statut.
Acest ghid arată cum să configurați clienții OpenVPN pentru a se conecta folosind o Nitrokey Pro 2 sau o Nitrokey Storage 2. Pentru gestionarea cheilor software vom folosi Easy-RSA, un utilitar care a evoluat odată cu 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).
Vom folosi Easy-RSA, deoarece pare să ofere o anumită flexibilitate și permite gestionarea cheilor prin intermediul unor PKI-uri externe. Îl vom utiliza pe server pentru a emite cererea de semnare și vom repeta același proces pe client. Cererile de semnare a certificatelor vor fi semnate de către CA pe Nitorkey HSM și retransmise către server și client.
Condiții prealabile#
În documentația următoare vom avea nevoie de 3 mașini diferite, după cum urmează:
Server OpenVPN (v. 2.5) pe Debian 10 (mașină virtuală EC2 - AWS)
Client OpenVPN (v. 2.4.9) pe Fedora 30 (mașină locală)
Autoritatea de certificare va fi accesibilă de pe o mașină autonomă cu Fedora 30 (mașină locală).
Pentru a interacționa cu dispozitivele vom avea nevoie de OpenSC 0.20 instalat pe client și pe mașina CA (mașinile locale). Puteți urma instrucțiunile pentru a-l configura în acest link (*Unix).
Pentru a descărca dependențele de pe mașinile Fedora, putem urma această instrucțiune:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Pentru Debian Linux, pachete OpenSC mai recente sunt disponibile ` aici <https://github.com/Nitrokey/opensc-build>`__.
Vom utiliza următoarele Nitrokeys pentru gestionarea fizică a cheilor:
O cheie de autentificare folosind `Nitrokey Pro 2 (pdf) <https://www.nitrokey.com/files/doc/Nitrokey_Pro_factsheet.pdf>`____.
O autoritate de certificare (CA) care utilizează `Nitrokey HSM 2 (pdf) <https://www.nitrokey.com/files/doc/Nitrokey_HSM_factsheet.pdf>`____.
Vă reamintim că, pentru a construi o autoritate de certificare pe Nitrokey HSM 2, puteți urma instrucțiunile disponibile în documentația.
Alternativ, vă puteți configura propriul CA pe o pe o mașină separată, sau puteți utiliza tutorialul OpenVPN care se bazează, de asemenea, pe Easy-RSA. Ultimele 2 opțiuni se bazează pe soluții software pentru gestionarea cheilor.
Partea serverului#
1. Instalați OpenVPN#
Mai întâi trebuie să activăm IP Forwarding prin editarea fișierului
/etc/sysctl.conf`
$ editor /etc/sysctl.confDecomentați sau modificați în consecință următoarea linie
net.ipv4.ip_forward=1Închideți după ce l-ați salvat și introduceți această comandă
$ sysctl -pOdată ce redirecționarea IP este realizată, va trebui să descărcăm cea mai recentă versiune de OpenvPN pentru serverul nostru Debian 10, conform acestei instrucțiuni:
Schimbați-vă în root și descărcați cheia GPG care a semnat pachetul
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -Adăugați URL-ul pachetelor OpenVPN adecvate în fișierul
sources.list`
.# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitAm descărcat OpenVPN 2.5 deoarece „password prompt” necesită cel puțin OpenVPN versiunea 2.4.8 pentru a se conecta.
În continuare descărcăm OpenVPN
$ sudo apt install openvpnDacă doriți să verificați versiunea, este posibil prin apelarea
--version`
și să imprimați următoarele:$ 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. Instalați Easy-RSA#
Pentru a construi PKI, vom descărca cea mai recentă versiune a Easy-RSA pe server și pe mașinile client. Pentru a obține cea mai recentă versiune, accesați pagina Releases de pe proiectul oficial EasyRSA GitHub, copiați link-ul de descărcare pentru fișierul care se termină în
.tgz
, apoi lipiți-l în următoarea comandă:
Descărcați cea mai recentă versiune
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzExtrageți tarball-ul
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Creați o ICP pentru serverul OpenVPN#
Înainte de a crea cheia privată și certificatul serverului OpenVPN, trebuie să creați un director local al Infrastructurii de chei publice pe serverul OpenVPN. Veți utiliza acest director pentru a gestiona solicitările de certificate ale serverului și ale clienților, în loc să le faceți direct pe serverul CA.
Pentru a crea un director PKI pe serverul OpenVPN, va trebui să completați un fișier numit
vars
cu câteva valori implicite.
Creați un fișier
vars`
$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsDupă ce fișierul este deschis, introduceți următoarele două linii
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Acestea sunt singurele două linii de care aveți nevoie în acest fișier
vars
pe serverul OpenVPN, deoarece nu va fi utilizat ca autoritate de certificare. Acestea se vor asigura că cheile private și cererile de certificate sunt configurate pentru a utiliza criptografia cu curbă eliptică (ECC) pentru a genera chei și semnături sigure pentru clienții dvs. și serverul OpenVPN.În ceea ce privește alegerea algoritmilor criptografici, eu urmez modelul din acest tutorial, iar voi puteți să le personalizați în funcție de nevoile voastre specifice.
Inițializarea ICP
După ce ați completat fișierul
vars`
, puteți trece la crearea directorului PKI. Pentru a face acest lucru, rulați scriptul easyrsa cu opțiunea init-pki:$ ./easyrsa init-pkiDupă ce ați inițializat PKI pe serverul OpenVPN, sunteți gata să treceți la următorul pas, care constă în crearea unei cereri de certificat și a unei chei private pentru serverul OpenVPN.
4. Creați server.req
și server.key
#
Acum că serverul OpenVPN are toate condițiile prealabile instalate, următorul pas este să generați o pereche de chei compusă dintr-o cheie privată (care trebuie păstrată secretă) și o cerere de semnare a certificatului (
.csr
) pe serverul OpenVPN.În termeni generali, pe sistemele în care generăm o cheie și o cerere, aceste fișiere sunt lăsate necriptate prin utilizarea argumentului
nopass
, deoarece serverele trebuie de obicei să pornească fără introducerea unei parole. Acest lucru generează o cheie necriptată, așa că aveți grijă să protejați cu atenție accesul acesteia și permisiunile de fișier.Sfat
Note de configurare de la 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.
Certificatul serverului trebuie să aibă următoarele caracteristici:
keyUsage: digitalSignature, keyEncipherment`
extendedKeyUsage: serverAuth`
Creați cererea de semnare pentru server
Navigați în directorul
~/easyrsa`
de pe serverul OpenVPN ca utilizator non-root și introduceți următoarele comenzi:$ cd easyrsa/ $ ./easyrsa gen-req server nopassAceasta va crea o cheie privată pentru server și un fișier de cerere de certificat numit
server.req`
.După ce aveți un certificat semnat, îl veți transfera înapoi pe serverul OpenVPN.
Copiați cheia în directorul serverului OpenVPN
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/După finalizarea acestor pași, ați creat cu succes o cheie privată pentru serverul OpenVPN. De asemenea, ați generat o cerere de semnare a certificatului pentru serverul OpenVPN.
Sfat
Extensiile de fișiere pentru cererile de semnare a certificatelor
Extensia de fișier care este adoptată de tutorialul CA și HSM indică crearea unui fișier
.csr
, însă Easy-RSA creează cereri de semnare a certificatelor cu extensia.req
.Vom folosi interschimbabil ambele extensii, asigurându-ne în același timp că transferăm fișierele corecte către Autoritatea de Certificare și vom genera un certificat final cu extensia
.crt
.În următoarea secțiune a acestui ghid, vom semna un fișier
.req`
cu CA-ul nostru implementat pe dispozitivul HSM 2. În acest scop, voi folosi o mașină dedicată pentru a semna cererile.
5. Semnați și preluați server.crt`
#
Următoarele instrucțiuni necesită transferul fișierului
server.req
(sauserver.csr
) în sistemul CA.Transferul în sine nu este sensibil din punct de vedere al securității, deși este înțelept să se verifice dacă fișierul primit se potrivește cu copia expeditorului, în cazul în care transportul nu este de încredere.
Pentru a parcurge acești pași, mă voi baza în mare măsură pe aceste instrucțiuni, pentru a semna cererile de semnare a certificatelor, după ce le-am generat cu Easy-RSA.
Semnați fișierul
server.req
Pe computerul local dedicat accesării HSM, vom utiliza instrumentele furnizate de Opensc 0.20 pentru a semna fișierul
.req
și a-l trimite înapoi la serverul OpenVPN. Presupunem că am transferat fișierul de pe mașina serverului pe mașina CA.În primul rând, începem prin a conecta HSM Nitrokey și introducem această instrucțiune pentru a lista cheile disponibile.
Interogarea listei de dispozitive disponibile
$ p11tool --list-all(Pas necesar) Dacă este prima dată când semnați un certificat cu AC, poate doriți să recuperați URI-ul cheii private a AC de la HSM și să îl includeți în fișierul de configurare.
Notă
URI-ul cheii trebuie să aibă acest format:
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=privateCreați directorul
openvpn/`
subcertificate-authority/`
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Semnează
`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.crtPreluarea fișierului
server.crt
pe calculatorul server
Transferați certificatele semnate pe server
De pe calculatorul CA, copiați fișierele
server.crt
șichain.crt
pe serverul OpenVPN. În acest exemplu, vom utiliza comandascp`
după cum urmează:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpAșezați certificatele în directorul serverului
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverAtenționare
Certificat CA și
chain.crt`
În cazul de mai sus, CA returnează certificatul sever semnat și include certificatul CA
CA.crt
, care este fișierulchain.crt
. Acest lucru se poate face pe un canal nesigur, deși clientul este încurajat să confirme dacă fișierulchain.crt
primit este valid, dacă transportul nu este de încredere.Este posibil să redenumiți fișierul
chain.crt`
înCA.crt
pe calculatorul țintă, însă vom folosi`chain.crt
în instrucțiunile următoare.
6. Configurați serverul OpenVPN#
O conexiune care utilizează TLS necesită mai multe certificate și chei de autentificare. Acum că le-am emis și semnat, le putem plasa în directoarele potrivite. Defalcarea certificatelor și cheilor care trebuie să se afle în directorul rădăcină sunt următoarele:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)Pe serverul OpenVPN, acum puteți crea fișierul de configurare
server.conf
cu editorul de text preferat. Fișierul poate fi configurat în funcție de nevoile dvs., în timp ce noi ne asigurăm să schimbăm secțiunile de certificat și cheie de server în funcție de numele pe care le-ați ales pentru fișierele pe care le-am semnat:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keyIată fișierul de configurare pe care îl putem folosi pentru a testa aceste instrucțiuni:
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 versionPentru a testa dacă configurația funcționează corect, putem folosi această comandă:
$ sudo openvpn --server --config server.conf
7. Porniți serviciul OpenVPN pe server#
Activați serviciul OpenVPN adăugându-l la systemctl și porniți-l folosind aceste comenzi:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverPentru a verifica de două ori dacă serviciul OpenVPN este activ, utilizați această comandă:
$ sudo systemctl status openvpn@serverOpenVPN ar trebui să funcționeze în acest moment.
Configurație pe partea clientului#
1. Instalați OpenVPN și Easy-RSA#
Instalați software-ul
Putem folosi direct
dnf install
pentru a instala OpenVPN 2.4.9 și Easy-RSA 3.0.7$ sudo dnf install openvpn easy-rsaApoi creăm ca non-root un director pentru Easy RSA numit
Easy-RSA`
$ mkdir ~/easyrsaȘi conectați-l la pachetul Easy RSA pe care tocmai l-am instalat
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Creați o ICP pentru clientul OpenVPN#
În același mod în care am creat o PKI pe serverul OpenVPN, vom crea o PKI folosind Easy-RSA pe partea clientului.
3. Creați un client.req
și client.key
#
În același mod în care am emis perechea de chei pe server, generăm o pereche de chei pentru client care va fi compusă din fișierul
client.req
și fișierulclient.key
. Acesta din urmă trebuie să fie păstrat secret pe calculatorul client.
4. Semnați client.req
și emiteți dosarul client.crt`
.#
Pentru a transfera fișierul
client.req`
pe calculatorul CA, vom folosi aceeași metodă ca și în cazul fișieruluiserver.req
.Odată transferat, pe calculatorul CA semnăm fișierul de cerere de semnare a certificatului cu această comandă
$ 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. Importați client.crt`
pe Nitrokey de pe mașina CA#
După ce am creat fișierul
client.crt
, conectăm dispozitivul Nitrokey Pro 2 în mașina CA și importăm fișierul.crt
în dispozitivul Pro 2 folosind această comandă:$ pkcs15-init --store-certificate client.crt --id 3Puteți vedea dacă cheia este efectiv stocată pe Nitrokey folosind această comandă:
$ pkcs15-tool -cSau, alternativ
$ pkcs11-tool --list-objectsPentru mai multe comenzi puteți consulta OpenSC wiki.
6. Recuperați fișierul chain.crt`
de pe calculatorul CA#
În timp ce noi păstrăm fișierul
client.crt
stored on the nitrokey Pro 2 device, we must retrieve thechain.crt
pe calculatorul client și îl stocăm în directorul adecvat. Putem folosiscp
ca în metoda explicată în secțiunea dedicată serverului din acest ghid.
7. Configurați clientul pentru a interacționa cu Nitrokey#
Acum, pe calculatorul client, vom conecta Nitrokey Pro și îl vom folosi pentru a stabili conexiunea VPN cu serverul. În termeni generali, o conexiune care utilizează TLS necesită mai multe certificate și chei pentru autentificare:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keyPentru acest ghid, putem utiliza următorul fișier
client.conf`
și să adăugăm opțiunile necesare în mod corespunzător: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
Determinați obiectul corect
Fiecare furnizor PKCS#11 poate suporta mai multe dispozitive. Pentru a vizualiza lista de obiecte disponibile, puteți utiliza următoarea comandă:
$ 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=%03Fiecare pereche certificat/cheie privată are un șir unic
Serialized id`
. Șirul id serializat al certificatului solicitat trebuie specificat, în fișierul de configurare. Putem face acest lucru prin adăugarea opțiuniipkcs11-id`
folosind ghilimele simple.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Adăugați ID-ul serializat recuperat la fișierul de configurare
Folosind editorul de text preferat, deschideți fișierul server.conf și adăugați următoarele linii, având grijă să introduceți propriile dvs. linii
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'Pentru setări suplimentare settings legate de autentificarea OpenVPN, puteți adăuga, de asemenea, câteva linii pentru a gestiona gestionarea cheilor, deși acest lucru este opțional.
Notă
Faceți clic pentru a vedea codul
# 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 PINEtapa opțională
Dacă aveți nevoie să testați configurația, cu și fără token pe Nitrokey, puteți adăuga linii la același
client.conf
și să comentați/ne-comentați liniile relevante în funcție de nevoile dumneavoastră:Notă
Faceți clic pentru a vedea codul
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1Configurați clientul OpenVPN
Fișierul de configurare final
client.conf`
ar trebui să arate ca acesta: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)
Pentru a stabili un handshake, trebuie să configurați OpenSSL inclus în OpenVPN.
Creați directorul
ssl
înC:\Program Files\OpenVPN
și creați fișierulopenssl.cnf
cu următorul conținut :openssl_conf = default_conf
[ default_conf ] ssl_conf = ssl_sect
[ ssl_sect ] system_default = ssl_default_sect
[ ssl_default_sect ] SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocol = TLSv1.2 MinProtocol = TLSv1.2
Cu această modificare, nu veți mai avea eroarea semnalată aici, aici și aici.
Probleme cunoscute
Există unele probleme cunoscute legate de conectarea OpenVPN cu OpenSC. Vă rugăm să consultați aceste probleme ` aici <https://github.com/Nitrokey/wiki/wiki/3rd-Party-Issues>`__.
8. Porniți clientul OpenVPN#
Porniți serviciul OpenVPN pe client
Activați serviciul OpenVPN și porniți-l folosind aceste comenzi:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.servicePentru a verifica de două ori dacă serviciul OpenVPN este activ, utilizați această comandă:
$ sudo systemctl status openvpn-server@server.serviceIntroduceți PIN-ul de utilizator
Când se execută clientul OpenVPN, trebuie introdus PIN-ul 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: ******Atenționare
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)În unele cazuri raportate, nu se solicită un PIN pe terminal. O soluție ar fi să utilizați această comandă pentru a vă conecta cu PIN-ul:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Alternativ, ați putea recompila clientul OpenVPN cu suportul systemd dezactivat, iar acesta vă va solicita PIN-ul așa cum era de așteptat.
O altă opțiune ar fi să vă conectați la instanța OpenVPN cu clientul Viscosity, care oferă o experiență de utilizare mai bună, în special pentru introducerea PIN-ului.