Konfiguracija OpenVPN z Easy-RSA#
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Opomba
Ta vodnik je v nastajanju in bo sproti posodabljan. Upoštevajte to stanje.
Ta vodnik prikazuje, kako konfigurirati odjemalce OpenVPN za prijavo z uporabo Nitrokey Pro 2 ali Nitrokey Storage 2. Za upravljanje programskih ključev bomo uporabljali Easy-RSA, pripomoček, ki se je razvijal skupaj 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).
Uporabili bomo Easy-RSA, ker se zdi, da zagotavlja določeno prilagodljivost in omogoča upravljanje ključev prek zunanjih PKI. Uporabili ga bomo v strežniku za izdajo zahteve za podpisovanje in enak postopek ponovili v odjemalcu. Zahteve za podpis potrdila bo podpisal CA v Nitorkeyjevem HSM ter jih ponovno poslal strežniku in odjemalcu.
Predpogoji#
V naslednji dokumentaciji bomo potrebovali 3 različne stroje, kot sledi:
Strežnik OpenVPN (v. 2.5) na sistemu Debian 10 (virtualni stroj EC2 - AWS)
Odjemalec OpenVPN (v. 2.4.9) v operacijskem sistemu Fedora 30 (lokalni računalnik)
Overitelj bo dostopen iz samostojnega računalnika z operacijskim sistemom Fedora 30 (lokalni računalnik).
Za interakcijo z napravami potrebujemo OpenSC 0.20, nameščen na odjemalcu in računalniku CA (lokalni računalniki). Za namestitev lahko sledite navodilom v tehni povezavi (*Unix).
Za prenos odvisnosti na napravah Fedora lahko uporabimo to navodilo:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Za Debian Linux so na voljo novejši paketi OpenSC tudi.
Za upravljanje fizičnih ključev bomo uporabili naslednje Nitrokeys:
Ključ za preverjanje pristnosti z uporabo Nitrokey Pro 2 (pdf)
Organ za izdajo potrdil (CA), ki uporablja Nitrokey HSM 2 (pdf)
Če želite zgraditi overitelja potrdil v sistemu Nitrokey HSM 2, sledite navodilom, ki so na voljo v dokumentaciji.
Lahko pa nastavite svoj CA v na ločenem računalniku ali uporabite vadnico OpenVPN, ki se prav tako opira na Easy-RSA. Zadnji dve možnosti se zanašata na programske rešitve za upravljanje ključev.
Na strani strežnika#
1. Namestite OpenVPN#
Najprej moramo omogočiti posredovanje IP z urejanjem datoteke
/etc/sysctl.conf
$ editor /etc/sysctl.confSpustite komentar ali ustrezno uredite naslednjo vrstico
net.ipv4.ip_forward=1Po shranjevanju ga zaprite in vnesite ta ukaz
$ sysctl -pKo bo posredovanje IP opravljeno, bomo morali prenesti najnovejšo izdajo OpenvPN za naš strežnik Debian 10 v skladu s temi navodili:
Spremenite se v root in prenesite ključ GPG, ki je podpisal paket
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -V datoteko
sources.list
dodajte URL ustreznih paketov OpenVPN# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitPrenesli smo OpenVPN 2.5, saj „poziv za geslo“ za prijavo zahteva vsaj OpenVPN različico 2.4.8.
Nato prenesemo OpenVPN
$ sudo apt install openvpnČe želite preveriti različico, lahko to storite tako, da pokličete
--version
in izpišete naslednje:$ 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. Namestite Easy-RSA#
Za izgradnjo PKI bomo na strežnik in odjemalske računalnike prenesli najnovejšo različico Easy-RSA. Najnovejšo različico dobite tako, da obiščete stran Releases na uradnem projektu EasyRSA GitHub, kopirate povezavo za prenos datoteke, ki se konča z
.tgz
, in jo nato prilepite v naslednji ukaz:
Prenesite najnovejšo različico
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzIzvleček paketa tarball
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Ustvarite PKI za strežnik OpenVPN#
Preden lahko ustvarite zasebni ključ in potrdilo strežnika OpenVPN, morate v strežniku OpenVPN ustvariti lokalni imenik infrastrukture javnih ključev. Ta imenik boste uporabljali za upravljanje zahtevkov za potrdila strežnika in odjemalcev, namesto da bi jih neposredno pošiljali v strežnik CA.
Če želite ustvariti imenik PKI v strežniku OpenVPN, morate datoteko z imenom
vars
napolniti z nekaj privzetimi vrednostmi.
Ustvarite datoteko
vars
$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsKo je datoteka odprta, prilepite naslednji dve vrstici
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"To sta edini dve vrstici, ki ju potrebujete v tej
vars
datoteki v strežniku OpenVPN, saj se ne bo uporabljala kot overitelj potrdil. Zagotovili bodo, da bodo vaši zasebni ključi in zahteve za potrdila konfigurirani tako, da bodo uporabljali kriptografijo eliptičnih krivulj (ECC) za generiranje ključev in varnih podpisov za vaše odjemalce in strežnik OpenVPN.Glede izbire kriptografskih algoritmov upoštevam model iz toga priročnika, lahko pa jih prilagodite glede na svoje posebne potrebe.
Inicializacija infrastrukture PKI
Ko izpolnite datoteko
vars
, lahko nadaljujete z ustvarjanjem imenika PKI. To storite tako, da zaženete skripto easyrsa z možnostjo init-pki:$ ./easyrsa init-pkiKo ste v strežniku OpenVPN inicializirali PKI, lahko preidete na naslednji korak, to je ustvarjanje zahteve za potrdilo strežnika OpenVPN in zasebnega ključa.
4. Ustvarite server.req
in server.key
#
Zdaj, ko so v strežniku OpenVPN nameščeni vsi predpogoji, je naslednji korak ustvarjanje para ključev, ki ga sestavljata zasebni ključ (ki naj ostane skrivnost) in zahteva za podpis potrdila (
.csr
) v strežniku OpenVPN.Na splošno v sistemih, kjer generiramo ključ in zahtevo, te datoteke ostanejo nešifrirane z uporabo argumenta
nopass
, saj se morajo strežniki običajno zagnati brez vnosa gesla. Tako se ustvari nešifriran ključ, zato skrbno zaščitite njegov dostop in dovoljenja za datoteke.Nasvet
Opombe o konfiguraciji iz 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.
Strežniško potrdilo mora vsebovati naslednje podatke:
keyUsage: digitalSignature, keyEncipherment
extendedKeyUsage: serverAuth
Ustvarite zahtevo za podpisovanje za strežnik
Kot uporabnik brez korena pojdite v imenik
~/easyrsa
v strežniku OpenVPN in vnesite naslednje ukaze:$ cd easyrsa/ $ ./easyrsa gen-req server nopassTo bo ustvarilo zasebni ključ za strežnik in datoteko z zahtevo za potrdilo z imenom
server.req
.Ko imate podpisano potrdilo, ga prenesite nazaj v strežnik OpenVPN.
Kopiranje ključa v imenik strežnika OpenVPN
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/Po opravljenih korakih ste uspešno ustvarili zasebni ključ za strežnik OpenVPN. Ustvarili ste tudi zahtevo za podpis potrdila za strežnik OpenVPN.
Nasvet
Razširitve datotek za zahteve za podpisovanje potrdil
Razširitev datoteke, ki jo prevzameta CA in HSM tutorial, označuje ustvarjanje datoteke
.csr
, vendar Easy-RSA ustvarja zahteve za podpisovanje potrdil z razširitvijo.req
.Obe razširitvi bomo uporabljali izmenično, pri čemer bomo poskrbeli, da bomo organu za potrjevanje prenesli prave datoteke in ustvarili končno potrdilo z razširitvijo
.crt
.V naslednjem razdelku tega vodnika bomo podpisali datoteko
.req
z našim CA, nameščenim v napravi HSM 2. V ta namen bom za podpisovanje zahtevkov uporabil namensko napravo.
5. Podpis in prevzem server.crt
#
Naslednja navodila zahtevajo prenos datoteke
server.req
(aliserver.csr
) v sistem CA.Sam prenos ni varnostno občutljiv, čeprav je pametno preveriti, ali se prejeta datoteka ujema s pošiljateljevo kopijo, če prenos ni zaupanja vreden.
Pri izvajanju teh korakov se bom v veliki meri oprl na te navodila za podpisovanje zahtevkov za podpis potrdil, ko smo jih ustvarili z Easy-RSA.
Podpisovanje datoteke
server.req
V lokalnem računalniku, namenjenem za dostop do HSM, bomo uporabili orodja, ki jih zagotavlja Opensc 0.20, za podpisovanje datoteke
.req
in jo poslali nazaj v strežnik OpenVPN. Predpostavljamo, da smo datoteko prenesli iz strežnikovega računalnika v računalnik CA.Najprej začnemo s priključitvijo ključa HSM Nitrokey in vnesemo to navodilo za seznam tipk, ki so na voljo.
Poizvedba po seznamu razpoložljivih naprav
$ p11tool --list-all(obvezen korak) Če prvič podpisujete potrdilo s CA, boste morda želeli pridobiti URI zasebnega ključa CA iz HSM in ga vključiti v konfiguracijsko datoteko.
Opomba
URI ključa mora biti v tej obliki:
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=privateUstvarite
openvpn/
imenik podcertificate-authority/
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Podpisati
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.crtPridobite datoteko
server.crt
v strežniški računalnik
Prenos podpisanih potrdil v strežnik
Iz računalnika CA kopirajte datoteke
server.crt
inchain.crt
v strežnik OpenVPN. V tem primeru bomo uporabili ukazscp
, kot sledi:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpPotrdila namestite v imenik strežnika
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverOpozorilo
Potrdilo CA in
chain.crt
V zgornjem primeru CA vrne podpisano potrdilo sever in vključuje potrdilo CA
CA.crt
, ki jechain.crt
. To je mogoče storiti prek nezanesljivega kanala, čeprav se odjemalcu priporoča, da potrdi, ali je prejetichain.crt
veljaven, če prenos ni zaupanja vreden.Datoteko
chain.crt
je mogoče preimenovati vCA.crt
v ciljnem računalniku, vendar bomo v naslednjih navodilih uporabilichain.crt
.
6. Konfiguracija strežnika OpenVPN#
Povezava, ki uporablja TLS, zahteva več certifikatov in ključev za preverjanje pristnosti. Zdaj, ko smo jih izdali in podpisali, jih lahko postavimo v prave imenike. Razdelitev potrdil in ključev, ki se morajo nahajati v korenskem imeniku, je naslednja:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)V strežniku OpenVPN lahko zdaj ustvarite konfiguracijsko datoteko
server.conf
z najljubšim urejevalnikom besedila. Datoteko lahko konfigurirate v skladu s svojimi potrebami, mi pa poskrbimo, da spremenimo dele certifikata in ključa strežnika v skladu z imeni, ki ste jih izbrali za vaše datoteke, ki smo jih podpisali:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keyTukaj je konfiguracijska datoteka, ki jo lahko uporabimo za testiranje teh navodil:
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 versionČe želimo preveriti, ali konfiguracija deluje pravilno, lahko uporabimo ta ukaz:
$ sudo openvpn --server --config server.conf
7. Zagon storitve OpenVPN v strežniku#
Omogočite storitev OpenVPN tako, da jo dodate v systemctl, in jo zaženite s temi ukazi:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverZa dvojno preverjanje, ali je storitev OpenVPN aktivna, uporabite ta ukaz:
$ sudo systemctl status openvpn@serverNa tej točki mora delovati OpenVPN.
Konfiguracija na strani odjemalca#
1. Namestitev OpenVPN in Easy-RSA#
Namestitev programske opreme
Za namestitev OpenVPN 2.4.9 in Easy-RSA 3.0.7 lahko neposredno uporabimo
dnf install
$ sudo dnf install openvpn easy-rsaNato ustvarimo imenik za Easy RSA z imenom
Easy-RSA
$ mkdir ~/easyrsain ga povežite s paketom Easy RSA, ki smo ga pravkar namestili
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Ustvarite PKI za odjemalca OpenVPN#
Na enak način, kot smo ustvarili PKI v strežniku OpenVPN, bomo ustvarili PKI z uporabo Easy-RSA na strani odjemalca.
3. Ustvarite client.req
in client.key
#
Na enak način, kot smo izdali par ključev v strežniku, ustvarimo par ključev za odjemalca, ki bo sestavljen iz datoteke
client.req
in datotekeclient.key
. Slednja mora biti v odjemalčevem računalniku tajna.
4. Podpisati client.req
in izdati client.crt
datoteko#
Za prenos datoteke
client.req
v računalnik CA bomo uporabili enako metodo kot za datotekoserver.req
.Po prenosu na računalniku CA podpišemo datoteko z zahtevo za podpis potrdila s tem ukazom
$ 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. Uvoz client.crt
na Nitrokey iz naprave CA#
Po ustvarjanju datoteke
client.crt
priključimo napravo Nitrokey Pro 2 v računalnik CA in uvozimo.crt
v napravo Pro 2 s tem ukazom:$ pkcs15-init --store-certificate client.crt --id 3S tem ukazom lahko preverite, ali je ključ učinkovito shranjen v napravi Nitrokey:
$ pkcs15-tool -cAli pa
$ pkcs11-tool --list-objectsZa več ukazov se lahko obrnete na OpenSC wiki.
6. Pridobite datoteko chain.crt
z računalnika CA#
Medtem ko
client.crt
stored on the nitrokey Pro 2 device, we must retrieve thechain.crt
datoteko hranimo v odjemalskem računalniku in v ustreznem imeniku. Uporabimo lahkoscp
kot pri metodi, razloženi v strežniškem delu tega vodnika.
7. Konfigurirajte odjemalca za interakcijo z napravo Nitrokey#
Zdaj bomo v odjemalskem računalniku priključili ključ Nitrokey Pro in z njim vzpostavili povezavo VPN s strežnikom. Na splošno velja, da povezava, ki uporablja protokol TLS, zahteva več potrdil in ključev za preverjanje pristnosti:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keyZa ta vodnik lahko uporabimo naslednjo datoteko
client.conf
in ji ustrezno dodamo zahtevane možnosti: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
Določite pravilen predmet
Vsak ponudnik PKCS#11 lahko podpira več naprav. Za ogled seznama razpoložljivih predmetov lahko uporabite naslednji ukaz:
$ 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=%03Vsak par potrdilo/zasebni ključ ima edinstven
Serialized id
niz. V konfiguracijski datoteki je treba navesti serializiran niz id zahtevanega potrdila. To lahko storimo tako, da dodamo možnostpkcs11-id
z uporabo enojnih narekovajev.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Dodajanje pridobljenega serializiranega ID v konfiguracijsko datoteko
Z najljubšim urejevalnikom besedila odprite datoteko server.conf in dodajte naslednje vrstice, pri čemer pazite, da vstavite svoje
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'Za dodatne nastavitve, povezane z avtentikacijo OpenVPN, lahko dodate tudi nekaj vrstic za upravljanje ključev, čeprav to ni obvezno.
Opomba
Kliknite za ogled kode
# 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 PINIzbirni korak
Če želite preizkusiti konfiguracijo z žetonom na ključu Nitrokey in brez njega, lahko dodate vrstice v isti
client.conf
in po potrebi komentirate/odkomentirate ustrezne vrstice:Opomba
Kliknite za ogled kode
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1Konfiguracija odjemalca OpenVPN
Končna konfiguracijska datoteka
client.conf
mora biti videti kot ta: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)
Da bi lahko vzpostavili handshake, morate konfigurirati OpenSSL, ki je vključen v OpenVPN.
Ustvarite imenik
ssl
vC:\Program Files\OpenVPN
in ustvarite datotekoopenssl.cnf
z naslednjo vsebino :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
S to spremembo ne boste imeli napak, o katerih poročajo tukaj, tukaj in tukaj.
Znane težave
Obstaja nekaj znanih težav, povezanih s prijavo v OpenVPN z OpenSC. Te težave si oglejte tudi.
8. Zagon odjemalca OpenVPN#
Zagon storitve OpenVPN v odjemalcu
Omogočite storitev OpenVPN in jo zaženite s temi ukazi:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.serviceČe želite dvakrat preveriti, ali je storitev OpenVPN aktivna, uporabite ta ukaz:
$ sudo systemctl status openvpn-server@server.serviceVnesite uporabniško kodo PIN
Pri izvajanju odjemalca OpenVPN je treba vnesti kodo 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: ******Opozorilo
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)V nekaterih primerih, o katerih so poročali, terminal ne zahteva vnosa kode PIN. To bi se dalo zaobiti tako, da bi se s tem ukazom prijavili s kodo PIN:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Lahko pa ` ponovno sestavite odjemalca OpenVPN <https://forums.openvpn.net/viewtopic.php?f=4&t=23318>`__ z onemogočeno podporo systemd, ki vas bo po pričakovanjih pozval k vnosu kode PIN.
Druga možnost je, da se v svoj primerek OpenVPN prijavite z odjemalcem Viscosity, ki zagotavlja boljšo uporabniško izkušnjo, zlasti pri vnosu kode PIN.