OpenVPNi konfigureerimine Easy-RSAga#
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Märkus
See juhend on pooleli ja seda ajakohastatakse vastavalt. Palun võtke seda staatust arvesse.
See juhend näitab, kuidas konfigureerida OpenVPN-kliente sisselogimiseks, kasutades Nitrokey Pro 2 või Nitrokey Storage 2. Tarkvaralise võtmehalduse jaoks kasutame Easy-RSA utiliiti, mis on arenenud koos OpenVPNiga.
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).
Me kasutame Easy-RSA-d, sest see näib pakkuvat teatavat paindlikkust ja võimaldab võtmehaldust väliste PKIde kaudu. Me kasutame seda serveris allkirjastamistaotluse esitamiseks ja kordame sama protsessi kliendil. Sertifikaadi allkirjastamistaotlused allkirjastab CA Nitorkey HSMis ja edastab need uuesti serverile ja kliendile.
Eeltingimused#
Järgnevas dokumentatsioonis vajame 3 erinevat masinat, mis on järgmised:
OpenVPN server (v. 2.5) Debian 10 peal (EC2 virtuaalne masin - AWS)
OpenVPN klient (v. 2.4.9) Fedora 30 (kohalik masin)
Sertifitseerimisasutusele pääseb ligi Fedora 30-ga varustatud eraldiseisvast masinast (kohalik masin).
Seadmetega suhtlemiseks vajame OpenSC 0.20, mis on paigaldatud kliendile ja CA masinale (kohalikele masinatele). Selle seadistamise juhiseid saate järgida tema lingil (*Unix).
Sõltuvuste allalaadimiseks Fedora masinatele saame selle juhise:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Debian Linuxi jaoks on uuemad OpenSC paketid saadaval kuskil.
Me kasutame füüsilise võtme haldamiseks järgmisi Nitrokeys’e:
Autentimisvõti, kasutades Nitrokey Pro 2 (pdf)
Sertifitseerimisasutus (CA), mis kasutab Nitrokey HSM 2 (pdf)
Meeldetuletuseks, et Nitrokey HSM 2 sertifikaadibüroo loomiseks võite järgida dokumentatsioonis ` olevaid juhiseid <certificate-authority.html#sign-a-server-certificate>`_.
Alternatiivina võite luua oma CA ` eraldi masinas <https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-ubuntu-20-04>`__ või kasutada OpenVPNi õpetust, mis tugineb samuti Easy-RSA. Viimased 2 varianti tuginevad võtmehalduse tarkvaralahendustele.
Serveri poolel#
1. Paigaldage OpenVPN#
Esmalt tuleb lubada IP Forwarding, muutes
/etc/sysctl.conf
faili.$ editor /etc/sysctl.confTühjendage või redigeerige vastavalt järgmine rida
net.ipv4.ip_forward=1Pärast salvestamist sulgege see ja sisestage järgmine käsk
$ sysctl -pKui IP-i suunamine on tehtud, tuleb meie Debian 10 serverile alla laadida OpenvPN-i uusim versioon vastavalt toodud juhistele:
Vahetage administraatoriks ja laadige alla GPG võti, mis on paketi allkirjastanud.
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -Lisage sobivate OpenVPN pakettide URL aadressid faili
sources.list
.# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitMe laadisime alla OpenVPN 2.5, kuna „password prompt“ nõuab sisselogimiseks vähemalt OpenVPN versiooni 2.4.8.
Järgmisena laadime alla OpenVPN
$ sudo apt install openvpnKui soovite kontrollida versiooni, on võimalik, kui kutsute
--version
ja trükkida järgmine:$ 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. Paigaldage Easy-RSA#
PKI loomiseks laadime Easy-RSA uusima versiooni alla serverisse ja kliendimasinatesse. Viimase versiooni saamiseks minge ametliku EasyRSA GitHub projekti Releases lehele, kopeerige faili allalaadimislink, mis lõpeb
.tgz
, ja seejärel kleepige see järgnevasse käsku:
Lae alla uusim versioon
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzVäljavõtta tarball
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Luua PKI OpenVPN-serveri jaoks#
Enne OpenVPN-serveri privaatvõtme ja sertifikaadi loomist peate looma OpenVPN-serverisse kohaliku avaliku võtme infrastruktuuri kataloogi. Seda kataloogi kasutate serveri ja klientide sertifikaaditaotluste haldamiseks, selle asemel, et teha neid otse CA-serveris.
PKI kataloogi loomiseks OpenVPN serveris peate täitma faili nimega
vars
mõningate vaikeväärtustega.
Loo
vars<x>
faili.$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsKui fail on avatud, kleepige järgmised kaks rida sisse
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Need on ainsad kaks rida, mida vajate selles
vars
failis oma OpenVPN serveris, kuna seda ei kasutata sertifikaadiasutusena. Nad tagavad, et teie privaatvõtmed ja sertifikaaditaotlused on konfigureeritud kasutama Elliptic Curve Cryptography (ECC) võtmete ja turvaliste allkirjade loomiseks teie klientide ja OpenVPN-serveri jaoks.Mis puutub krüptograafiliste algoritmide valikusse, siis ma järgin tema õpetuse mudelit, ja te võite neid kohandada vastavalt oma konkreetsetele vajadustele.
PKI initsialiseerimine
Kui olete täitnud
vars
faili, võite jätkata PKI kataloogi loomisega. Selleks käivitage skript easyrsa koos init-pki valikuga:$ ./easyrsa init-pkiKui olete OpenVPN-serveri PKI initsialiseerinud, olete valmis liikuma järgmise sammu juurde, milleks on OpenVPN-serveri sertifikaaditaotluse ja privaatvõtme loomine.
4. Loo server.req
ja server.key
.#
Nüüd, kui teie OpenVPN serverile on paigaldatud kõik eeldused, on järgmine samm luua võtmepaar, mis koosneb privaatvõtmest (mida tuleb hoida salajas) ja sertifikaadi allkirjastamise taotlusest (
.csr
) teie OpenVPN serverile.Üldiselt on süsteemides, kus me genereerime võtme ja taotluse, need failid jäetakse krüpteerimata, kasutades argumenti
nopass
, kuna serverid peavad tavaliselt käivituma ilma salasõna sisestamata. See genereerib krüptimata võtme, seega pidage silmas kaitske selle juurdepääsu ja failiõigusi hoolikalt.Nõuanne
OpenVPNi konfiguratsioonimärkused:
- The server, and each client, must have their own cert and key
file. The server and all clients will use the same CA file.
Serveri sertifikaat peaks olema järgmine:
keyUsage: digitalSignature, keyEncipherment<x>
extendedKeyUsage: serverAuth<x>
Luua serverile allkirjastamistaotlus
Navigeerige oma OpenVPN-serveri kataloogi
~/easyrsa
oma mitte-root-kasutajana ja sisestage järgmised käsud:$ cd easyrsa/ $ ./easyrsa gen-req server nopassSellega luuakse serveri jaoks privaatne võti ja sertifikaaditaotluse fail nimega
server.req
.Kui teil on allkirjastatud sertifikaat, siis edastate selle tagasi OpenVPN-serverisse.
Kopeerige võti OpenVPN serveri kataloogi
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/Pärast nende sammude lõpuleviimist olete edukalt loonud OpenVPN-serveri privaatvõtme. Samuti olete loonud OpenVPN-serveri jaoks sertifikaadi allkirjastamise taotluse.
Nõuanne
Sertifikaadi allkirjastamise taotluste faililaiendid
CA ja HSMi juhendmaterjalis kasutatav faililaiend viitab
.csr
faili loomisele, kuid Easy-RSA loob sertifikaadi allkirjastamise taotlused laiendiga.req
.Kasutame mõlemat laiendust vaheldumisi, tagades samas, et edastame sertifikaadiasutusele õiged failid, ja genereerime lõpliku sertifikaadi laiendiga
.crt
.Käesoleva juhendi järgmises osas allkirjastame
.req
faili meie CA-ga, mis on paigaldatud HSM 2 seadmesse. Selleks kasutan taotluste allkirjastamiseks spetsiaalset masinat.
5. Allkiri ja tagasivõtmine server.crt
#
Järgnevad juhised nõuavad
server.req
(võiserver.csr
) faili ülekandmist CA-süsteemi.Ülekanne ise ei ole turvatundlik, kuigi on mõistlik kontrollida, kas vastuvõetud fail vastab saatja koopiale, kui transport ei ole usaldusväärne.
Nende sammude läbimiseks toetun ma ulatuslikult toodud juhistele, et allkirjastada sertifikaadi allkirjastamise taotlusi, kui me need Easy-RSA-ga genereerisime.
Allkirjastage
server.req
failiLokaalses masinas, mis on ette nähtud HSMile juurdepääsuks, kasutame Opensc 0.20 poolt pakutavaid vahendeid, et allkirjastada
.req
fail ja saata see tagasi OpenVPN-serverisse. Eeldame, et oleme faili edastanud serveri masinast CA masinasse.Kõigepealt alustame HSM Nitrokey ühendamisest ja sisestame selle juhise, et loetleda olemasolevad võtmed.
Kättesaadavate seadmete loendi päring
$ p11tool --list-all(Vajalik samm) Kui allkirjastate sertifikaadi esmakordselt CAga, võiksite HSMist saada CA privaatvõtme URI ja lisada selle konfiguratsioonifaili.
Märkus
Võtme URI peaks olema sellisel kujul:
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=privateLoo
openvpn/
kataloogicertificate-authority/
alla.$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Allkiri
server.req<x>
$ 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.crtTooge
server.crt
faili serverisse masinasse.
Viige allkirjastatud sertifikaadid serverisse
Kopeerige CA masinast OpenVPN-serverisse failid
server.crt
jachain.crt
. Selles näites kasutame käskuscp<x>
järgmiselt:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpAsetage sertifikaadid serveri kataloogi
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverHoiatus
CA sertifikaat ja
chain.crt
Ülaltoodud juhul tagastab CA allkirjastatud sever-sertifikaadi ja sisaldab CA sertifikaati
CA.crt
, mis onchain.crt
fail. Seda võib teha üle ebaturvalise kanali, kuigi kliendil soovitatakse kinnitada, kas saadudchain.crt
on kehtiv, kui transport on ebaturvaline.Faili
chain.crt
on võimalik sihtmasinal ümber nimetada failiksCA.crt
, aga me kasutame järgmistes juhisteschain.crt
.
6. Konfigureerige OpenVPN server#
TLS-i kasutav ühendus nõuab autentimiseks mitu sertifikaati ja võtit. Nüüd, kui me need välja andsime ja allkirjastasime, võime need õigetesse kataloogidesse paigutada. Sertifikaatide ja võtmete jaotus, mis peavad asuma juurkataloogis, on järgmine:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)Nüüd saate oma OpenVPN-serveris luua oma lemmiktekstiredaktoriga konfiguratsioonifaili
server.conf
. Faili saab konfigureerida vastavalt teie vajadustele, kusjuures me muudame kindlasti serveri sertifikaadi ja võtme sektsioonid vastavalt teie poolt valitud nimedele teie allkirjastatud failidele:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keySiin on konfiguratsioonifail, mida saame kasutada nende juhiste testimiseks:
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 versionSelleks, et testida, kas konfiguratsioon toimib korralikult, võime kasutada seda käsku:
$ sudo openvpn --server --config server.conf
7. Käivitage OpenVPN teenus serveris#
Lubage OpenVPN teenus, lisades selle systemctl-i ja käivitage see nende käskude abil:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverOpenVPN-teenuse aktiivsuse kahekordseks kontrollimiseks kasutage seda käsku:
$ sudo systemctl status openvpn@serverOpenVPN peaks sel hetkel töötama.
Kliendipoolne konfiguratsioon#
1. Paigaldage OpenVPN ja Easy-RSA#
Paigaldage tarkvara
Me võime kasutada otse
dnf install
OpenVPN 2.4.9 ja Easy-RSA 3.0.7 installimiseks.$ sudo dnf install openvpn easy-rsaSeejärel loome mitte-root’ina kataloogi Easy RSA jaoks nimega
Easy-RSA
$ mkdir ~/easyrsaJa ühendage see Easy RSA paketiga, mille me just paigaldasime.
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Luua PKI OpenVPN-kliendi jaoks#
Samamoodi, nagu me lõime PKI OpenVPN-i serveris, loome PKI, kasutades Easy-RSA-d kliendi poolel.
3. Loo client.req
ja client.key
.#
Samamoodi, nagu me väljastasime võtmepaari Severile, genereerime kliendile võtmepaari, mis koosneb
client.req
failist jaclient.key
failist. Viimast tuleb hoida kliendi masinas salajas.
4. Kirjutage client.req
ja väljastage client.crt
fail.#
Faili
client.req
üleandmiseks CA masinale kasutame sama meetodit, mida kasutasime failiserver.req
puhul.Kui see on üle kantud, allkirjastame sertifikaadi allkirjastamise taotluse faili CA masinas selle käsuga
$ 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. Impordi client.crt
Nitrokey masinale CA masinast.#
Pärast
client.crt
faili loomist ühendame Nitrokey Pro 2 seadme CA masinaga ja impordime.crt
Pro 2 seadmesse selle käsuga:$ pkcs15-init --store-certificate client.crt --id 3Selle käsu abil saate näha, kas võti on Nitrokey’s tõhusalt salvestatud:
$ pkcs15-tool -cVõi alternatiivselt
$ pkcs11-tool --list-objectsRohkem käsklusi leiate OpenSC wiki.
6. Hangi chain.crt
fail CA masinast.#
While we keep the
client.crt
stored on the nitrokey Pro 2 device, we must retrieve thechain.crt
file on the client machine, and store it in the adequate directory. We may usescp
as in the method explained in the server section of this guide.
7. Konfigureerige klient Nitrokey’ga suhtlemiseks.#
Nüüd tagasi kliendi masinas, ühendame Nitrokey Pro ja kasutame seda VPN-ühenduse loomiseks serveriga. Üldiselt nõuab TLS-i kasutav ühendus autentimiseks mitut sertifikaati ja võtit:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keySelle juhendi jaoks võime kasutada järgmist
client.conf<x>
faili ja lisada sinna vastavalt vajalikud valikud: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
Määrake õige objekt
Iga PKCS#11 teenusepakkuja võib toetada mitut seadet. Kättesaadavate objektide nimekirja vaatamiseks saate kasutada järgmist käsku:
$ 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=%03Igal sertifikaadi/privaatvõtme paaril on unikaalne
Serialized id
string. Konfiguratsioonifailis tuleb määrata taotletava sertifikaadi id-stringi jada. Seda saame teha, lisadespkcs11-id
valiku, kasutades ühekordseid jutumärke.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Lisada saadud serialiseeritud ID konfiguratsioonifaili
Kasutades oma lemmiktekstiredaktorit, avage fail server.conf ja lisage järgmised read, hoolitsedes samas selle eest, et sisestada oma
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'OpenVPN-iga seotud täiendavate seadete autentimisega seoses võite lisada ka paar rida võtmehalduse käsitlemiseks, kuigi see on vabatahtlik.
Märkus
Koodide vaatamiseks klõpsake
# 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 PINVabatahtlik samm
Kui teil on vaja testida konfiguratsiooni koos ja ilma Nitrokey märgiga, võite lisada ridu samasse
client.conf
ja kommenteerida/mittekommenteerida asjaomaseid ridu vastavalt oma vajadustele:Märkus
Koodide vaatamiseks klõpsake
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1OpenVPN-kliendi konfigureerimine
Lõplik konfiguratsioonifail
client.conf
peaks välja nägema selline: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)
Kätevahetuse loomiseks peate konfigureerima OpenVPNi juurde kuuluva OpenSSL-i.
Create the directory
ssl
inC:\Program Files\OpenVPN
and create fileopenssl.cnf
with the following content :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
Selle muudatusega ei ole teil viga, nagu on teatatud siin, siin ja siin.
Teadaolevad probleemid
OpenVPN-i sisselogimisega on teadaolevalt seotud mõned probleemid OpenSC-ga. Palun tutvuge nende probleemidega kuskil.
8. Käivitage OpenVPN-klient#
Käivitage OpenVPN teenus kliendil
Lubage OpenVPN teenus ja käivitage see nende käskude abil:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.serviceOpenVPN-teenuse aktiivsuse kontrollimiseks kasutage seda käsku:
$ sudo systemctl status openvpn-server@server.serviceSisestage oma kasutaja PIN-kood
OpenVPN-kliendi käivitamisel tuleb sisestada Nitrokey PIN-kood:
$ 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: ******Hoiatus
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)Mõnel teatatud juhul ei küsi terminalis PIN-koodi. Üks lahendus oleks kasutada seda käsku PIN-koodiga sisselogimiseks:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Alternatiivina võite rekompileerida OpenVPN kliendi, mille systemd-tugi on välja lülitatud, ja see küsib PIN-koodi ootuspäraselt.
Teine võimalus on logida OpenVPNi instantsi sisse Viscosity kliendiga, mis pakub paremat kasutajakogemust, eriti PIN-koodi sisestamisel.