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.
Za podpisovanje potrdil bomo uporabili Nitrokey HSM 2, nastavljen kot Certificate Authority, vendar ta vodnik ne zajema nastavitve samega CA (ta je jasna in dobro dokumentirana tukaj).
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#
Namestitev OpenVPN#
Najprej moramo omogočiti posredovanje IP z urejanjem datoteke
/etc/sysctl.conf
$ editor /etc/sysctl.conf
Spustite komentar ali ustrezno uredite naslednjo vrstico
net.ipv4.ip_forward=1
Po shranjevanju ga zaprite in vnesite ta ukaz
$ sysctl -p
Ko 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 # exit
Prenesli 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
Namestitev 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.tgz
Izvleček paketa tarball
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
Ustvarjanje 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 vars
Ko 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-pki
Ko 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.
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:
Strežnik in vsak odjemalec morata imeti svojo datoteko s potrdilom in ključem. Strežnik in vsi odjemalci bodo uporabljali isto datoteko CA.
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 nopass
To 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.
Podpisovanje in pridobivanje server.crt
#
Naslednja navodila zahtevajo prenos datoteke server.req
(ali server.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.
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=private
Ustvarite
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.crt
Pridobite 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:/tmp
Potrdila namestite v imenik strežnika
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/server
Opozorilo
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
.
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:
datoteka korenskega potrdila (CA.crt ali chain.crt v naši nastavitvi)
Strežniško potrdilo
Ključ strežnika
Parametri Diffie Hellman (neobvezno)
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.key
Tukaj 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
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@server
Za dvojno preverjanje, ali je storitev OpenVPN aktivna, uporabite ta ukaz:
$ sudo systemctl status openvpn@server
Na tej točki mora delovati OpenVPN.
Konfiguracija na strani odjemalca#
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-rsa
Nato ustvarimo imenik za Easy RSA z imenom
Easy-RSA
$ mkdir ~/easyrsa
in ga povežite s paketom Easy RSA, ki smo ga pravkar namestili
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
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.
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 datoteke client.key
. Slednja mora biti v odjemalčevem računalniku tajna.
Podpišite client.req
in izdate datoteko client.crt
.#
Za prenos datoteke client.req
v računalnik CA bomo uporabili enako metodo kot za datoteko server.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
Uvozite client.crt
na Nitrokey iz računalnika 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 3
S tem ukazom lahko preverite, ali je ključ učinkovito shranjen v napravi Nitrokey:
$ pkcs15-tool -c
Ali pa
$ pkcs11-tool --list-objects
Za več ukazov se lahko obrnete na OpenSC wiki.
Pridobite datoteko chain.crt
iz računalnika CA#
Medtem ko client.crt
stored on the nitrokey Pro 2 device, we must retrieve the chain.crt
datoteko hranimo v odjemalskem računalniku in v ustreznem imeniku. Uporabimo lahko scp
kot pri metodi, razloženi v strežniškem delu tega vodnika.
Konfiguracija 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:
Datoteka korenskega potrdila (chain.crt)
Potrdilo odjemalca
Ključ stranke
Za 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=%03
Vsak 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 PIN
Izbirni 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 1
Konfiguracija 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 1
Znane težave
Obstaja nekaj znanih težav, povezanih s prijavo v OpenVPN z OpenSC. Te težave si oglejte tudi.
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.service
Vnesite 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
Žal se zdi, da OpenVPN ne more vzpostaviti handshake in se ustavi pri napaki, o kateri poroča tudi, znotraj in znotraj
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.