Konfigurácia OpenVPN pomocou Easy-RSA#
Poznámka
Na tejto príručke sa pracuje a bude sa priebežne aktualizovať. Prosím, berte tento stav do úvahy.
Tento návod ukazuje, ako nakonfigurovať klientov OpenVPN na prihlásenie pomocou Nitrokey Pro 2 alebo Nitrokey Storage 2. Na správu softvérových kľúčov budeme používať Easy-RSA, nástroj, ktorý sa vyvíjal spolu s OpenVPN.
Na podpisovanie certifikátov použijeme Nitrokey HSM 2 nastavený ako Certifikačná autorita, táto príručka sa však nezaoberá nastavením samotnej certifikačnej autority (je to jasné a dobre zdokumentované tu).
Použijeme Easy-RSA, pretože sa zdá, že poskytuje určitú flexibilitu a umožňuje správu kľúčov prostredníctvom externých PKI. Použijeme ho na serveri na vydanie žiadosti o podpis a rovnaký postup zopakujeme na klientovi. Žiadosti o podpísanie certifikátu budú podpísané certifikačnou autoritou na HSM Nitorkey a opätovne odoslané na server a klienta.
Predpoklady#
V nasledujúcej dokumentácii budeme potrebovať 3 rôzne stroje:
Server OpenVPN (v. 2.5) na Debiane 10 (virtuálny stroj EC2 - AWS)
Klient OpenVPN (v. 2.4.9) na Fedore 30 (lokálny počítač)
Certifikačná autorita bude prístupná zo samostatného počítača s Fedorou 30 (lokálny počítač)
Na interakciu so zariadeniami budeme potrebovať OpenSC 0.20 nainštalovaný na klientskom počítači a počítači CA (miestne počítače). Môžete postupovať podľa pokynov na jeho nastavenie v tomto odkaze (*Unix).
Na stiahnutie závislostí na počítačoch Fedora môžeme použiť tento návod:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Pre Debian Linux sú novšie balíky OpenSC k dispozícii tu.
Na správu fyzických kľúčov budeme používať nasledujúce Nitrokeys:
Autentizačný kľúč pomocou Nitrokey Pro 2 (pdf)
Certifikačná autorita (CA) používajúca Nitrokey HSM 2 (pdf)
Pripomíname, že pri vytváraní certifikačnej autority na Nitrokey HSM 2 môžete postupovať podľa pokynov, ktoré sú k dispozícii ` v dokumentácii <certificate-authority.html#sign-a-server-certificate>`_.
Prípadne môžete nastaviť vlastnú certifikačnú autoritu na na samostatnom počítači, alebo použiť návod OpenVPN, ktorý sa tiež spolieha na Easy-RSA. Posledné 2 možnosti sa spoliehajú na softvérové riešenia na správu kľúčov.
Na strane servera#
Inštalácia OpenVPN#
Najprv musíme povoliť IP Forwarding úpravou súboru
/etc/sysctl.conf
$ editor /etc/sysctl.conf
Zrušte komentár alebo zodpovedajúcim spôsobom upravte nasledujúci riadok
net.ipv4.ip_forward=1
Po uložení ho zavrite a zadajte tento príkaz
$ sysctl -p
Po dokončení presmerovania IP adries si budeme musieť stiahnuť najnovšiu verziu OpenvPN pre náš server Debian 10 podľa týchto pokynov:
Zmeňte sa na roota a stiahnite kľúč GPG, ktorý podpísal balík
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
Pridanie adresy URL príslušných balíkov OpenVPN do súboru
sources.list
# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exit
Stiahli sme OpenVPN 2.5, pretože „výzva na zadanie hesla“ vyžaduje na prihlásenie aspoň OpenVPN verzie 2.4.8.
Ďalej stiahneme OpenVPN
$ sudo apt install openvpn
Ak chcete skontrolovať verziu, je to možné zavolaním
--version
a vypísaním nasledujúceho:$ 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
Inštalácia aplikácie Easy-RSA#
Na vytvorenie PKI stiahneme na server a klientske počítače najnovšiu verziu Easy-RSA. Ak chcete získať najnovšiu verziu, prejdite na stránku Releases na oficiálnom projekte EasyRSA GitHub, skopírujte odkaz na stiahnutie súboru končiaceho na .tgz
a potom ho vložte do nasledujúceho príkazu:
Stiahnite si najnovšiu verziu
$ cd ~ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
Rozbalenie balíka tarball
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
Vytvorenie PKI pre server OpenVPN#
Pred vytvorením súkromného kľúča a certifikátu servera OpenVPN musíte na serveri OpenVPN vytvoriť miestny adresár infraštruktúry verejných kľúčov. Tento adresár budete používať na správu požiadaviek na certifikát servera a klientov namiesto toho, aby ste ich zadávali priamo na serveri certifikačnej autority.
Ak chcete vytvoriť adresár PKI na serveri OpenVPN, musíte naplniť súbor s názvom vars
niektorými predvolenými hodnotami.
Vytvorenie súboru
vars
$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor vars
Po otvorení súboru vložte nasledujúce dva riadky
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"
Toto sú jediné dva riadky, ktoré potrebujete v tomto
vars
súbore na vašom serveri OpenVPN, pretože sa nebude používať ako certifikačná autorita. Zabezpečí, aby vaše súkromné kľúče a žiadosti o certifikát boli nakonfigurované tak, aby sa na generovanie kľúčov a bezpečných podpisov pre vašich klientov a server OpenVPN používala kryptografia eliptických kriviek (ECC).Pokiaľ ide o výber kryptografických algoritmov, postupujem podľa vzoru v tomto návode a môžete si ich prispôsobiť podľa svojich konkrétnych potrieb.
Inicializácia infraštruktúry PKI
Po vyplnení súboru
vars
môžete pokračovať vo vytváraní adresára PKI. Na tento účel spustite skript easyrsa s voľbou init-pki:$ ./easyrsa init-pki
Po inicializácii PKI na serveri OpenVPN môžete prejsť k ďalšiemu kroku, ktorým je vytvorenie žiadosti o certifikát servera OpenVPN a súkromného kľúča.
Vytvorte server.req
a server.key
#
Teraz, keď má váš server OpenVPN nainštalované všetky predpoklady, je ďalším krokom vygenerovanie páru kľúčov pozostávajúceho zo súkromného kľúča (ktorý má zostať utajený) a žiadosti o podpis certifikátu (.csr
) na vašom serveri OpenVPN.
Všeobecne platí, že v systémoch, kde generujeme kľúč a požiadavku, sa tieto súbory nechávajú nezašifrované pomocou argumentu nopass
, pretože servery sa zvyčajne musia spúšťať bez zadávania hesla. Tým sa vygeneruje nešifrovaný kľúč, preto dbajte na dôkladnú ochranu jeho prístupových a súborových práv.
Tip
Poznámky ku konfigurácii z OpenVPN:
Server a každý klient musia mať vlastný súbor s certifikátom a kľúčom. Server a všetci klienti budú používať rovnaký súbor certifikačnej autority.
Certifikát servera by mal mať tieto vlastnosti:
keyUsage: digitalSignature, keyEncipherment
extendedKeyUsage: serverAuth
Vytvorenie požiadavky na podpisovanie pre server
Prejdite do adresára
~/easyrsa
na serveri OpenVPN ako používateľ, ktorý nie je root, a zadajte nasledujúce príkazy:$ cd easyrsa/ $ ./easyrsa gen-req server nopass
Tým sa vytvorí súkromný kľúč pre server a súbor žiadosti o certifikát s názvom
server.req
.Po získaní podpísaného certifikátu ho prenesiete späť na server OpenVPN.
Skopírujte kľúč do adresára servera OpenVPN
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/
Po dokončení týchto krokov ste úspešne vytvorili súkromný kľúč pre váš server OpenVPN. Vytvorili ste tiež žiadosť o podpis certifikátu pre server OpenVPN.
Tip
Prípony súborov pre žiadosti o podpisovanie certifikátov
Prípona súboru, ktorú preberá výučbový program CA a HSM, označuje vytvorenie súboru
.csr
, avšak Easy-RSA vytvára žiadosti o podpis certifikátu s príponou.req
.Obe prípony budeme používať striedavo, pričom sa uistíme, že do certifikačnej autority prenesieme správne súbory a vygenerujeme konečný certifikát s príponou
.crt
.
V ďalšej časti tejto príručky podpíšeme .req
súbor s našou certifikačnou autoritou nasadenou v zariadení HSM 2. Na tento účel použijem na podpisovanie požiadaviek vyhradené zariadenie.
Podpísať a načítať server.crt
#
Nasledujúce pokyny vyžadujú prenos súboru server.req
(alebo server.csr
) do systému CA.
Samotný prenos nie je bezpečnostne citlivý, hoci je rozumné overiť, či sa prijatý súbor zhoduje s kópiou odosielateľa, ak je prenos nedôveryhodný.
Aby som mohol prejsť týmito krokmi, budem sa vo veľkej miere opierať o tento návod na podpisovanie žiadostí o podpis certifikátu, keď sme ich vygenerovali pomocou Easy-RSA.
Podpíšte súbor server.req
#
Na lokálnom počítači určenom na prístup k HSM použijeme nástroje, ktoré poskytuje Opensc 0.20, aby sme podpísali súbor .req
a odoslali ho späť na server OpenVPN. Predpokladáme, že sme súbor preniesli zo serverového počítača do počítača CA.
Najskôr začneme zapojením HSM Nitrokey a zadáme tento pokyn pre zoznam dostupných kľúčov.
Vyhľadanie zoznamu dostupných zariadení
$ p11tool --list-all
(Povinný krok) Ak podpisujete certifikát pomocou certifikačnej autority prvýkrát, možno budete chcieť získať URI súkromného kľúča certifikačnej autority z HSM a zahrnúť ho do konfiguračného súboru.
URI kľúča by malo byť v tomto formáte:
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
Vytvorenie
openvpn/
adresára podcertificate-authority/
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/
Podpíšte
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
Získanie súboru server.crt
do počítača servera#
Prenos podpísaných certifikátov na server
Z počítača CA skopírujte súbory
server.crt
achain.crt
na server OpenVPN. V tomto príklade použijeme príkazscp
podľa nasledujúceho postupu:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
Umiestnenie certifikátov do adresára servera
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/server
Varovanie
Certifikát CA a
chain.crt
V uvedenom prípade certifikačná autorita vráti podpísaný certifikát sever a obsahuje certifikát certifikačnej autority
CA.crt
, ktorý jechain.crt
súborom. Toto sa môže vykonať cez nezabezpečený kanál, hoci klientovi sa odporúča potvrdiť, či je prijatýchain.crt
platný, ak je transport nedôveryhodný.Je možné premenovať súbor
chain.crt
naCA.crt
na cieľovom počítači, v ďalších pokynoch však budeme používaťchain.crt
.
Konfigurácia servera OpenVPN#
Spojenie, ktoré používa TLS, vyžaduje viacero certifikátov a kľúčov na overenie. Teraz, keď sme ich vydali a podpísali, môžeme ich umiestniť do správnych adresárov. Rozdelenie certifikátov a kľúčov, ktoré sa musia nachádzať v koreňovom adresári, je nasledovné:
Súbor koreňového certifikátu (CA.crt alebo chain.crt v našom nastavení)
Certifikát servera
Kľúč servera
Parametre Diffie Hellman (voliteľné)
Na svojom serveri OpenVPN teraz môžete vytvoriť konfiguračný súbor server.conf
pomocou svojho obľúbeného textového editora. Súbor môžete nakonfigurovať podľa svojich potrieb, pričom sa postaráme o zmenu častí certifikátu servera a kľúča podľa názvov, ktoré ste zvolili pre vaše súbory, ktoré sme podpísali:
# OpenVPN Server Certificate - CA, server key and certificate
ca chain.crt
cert server.crt
key server.key
Tu je konfiguračný súbor, ktorý môžeme použiť na testovanie týchto pokynov:
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
Ak chceme otestovať, či konfigurácia funguje správne, môžeme použiť tento príkaz:
$ sudo openvpn --server --config server.conf
Spustenie služby OpenVPN na serveri#
Povoľte službu OpenVPN jej pridaním do systemctl a spustite ju pomocou týchto príkazov:
$ sudo systemctl -f enable openvpn@server
$ sudo systemctl start openvpn@server
Ak chcete dvakrát skontrolovať, či je služba OpenVPN aktívna, použite tento príkaz:
$ sudo systemctl status openvpn@server
V tomto okamihu by mala byť spustená sieť OpenVPN.
Konfigurácia na strane klienta#
Inštalácia OpenVPN a Easy-RSA#
Inštalácia softvéru
Na inštaláciu OpenVPN 2.4.9 a Easy-RSA 3.0.7 môžeme použiť priamo
dnf install
$ sudo dnf install openvpn easy-rsa
Potom vytvoríme ako non-root adresár pre Easy RSA s názvom
Easy-RSA
$ mkdir ~/easyrsa
A prepojte ho s balíkom Easy RSA, ktorý sme práve nainštalovali
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
Vytvorenie PKI pre klienta OpenVPN#
Rovnakým spôsobom, ako sme vytvorili PKI na serveri OpenVPN, vytvoríme PKI pomocou Easy-RSA na strane klienta.
Vytvorte client.req
a client.key
#
Rovnakým spôsobom, ako sme vydali kľúčový pár na serveri, vygenerujeme kľúčový pár pre klienta, ktorý bude pozostávať zo súboru client.req
a súboru client.key
. Ten musí byť na klientskom počítači utajený.
Podpíšte client.req
a vystavte súbor client.crt
#
Na prenos súboru client.req
do počítača CA použijeme rovnaký postup ako pri súbore server.req
.
Po prenose podpíšeme na počítači certifikačnej autority súbor so žiadosťou o podpis certifikátu týmto príkazom
$ 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
Import client.crt
na Nitrokey z počítača CA#
Po vytvorení súboru client.crt
zapojíme zariadenie Nitrokey Pro 2 do počítača CA a pomocou tohto príkazu importujeme .crt
do zariadenia Pro 2:
$ pkcs15-init --store-certificate client.crt --id 3
Pomocou tohto príkazu môžete zistiť, či je kľúč efektívne uložený v zariadení Nitrokey:
$ pkcs15-tool -c
Prípadne
$ pkcs11-tool --list-objects
Viac príkazov nájdete na OpenSC wiki.
Získanie súboru chain.crt
z počítača CA#
Zatiaľ čo client.crt
stored on the nitrokey Pro 2 device, we must retrieve the chain.crt
súbor uchovávame na klientskom počítači a ukladáme ho do príslušného adresára. Môžeme použiť scp
ako v metóde vysvetlenej v serverovej časti tejto príručky.
Konfigurácia klienta na interakciu so systémom Nitrokey#
Teraz v klientskom počítači pripojíme Nitrokey Pro a použijeme ho na vytvorenie pripojenia VPN so serverom. Vo všeobecnosti platí, že spojenie, ktoré využíva TLS, si vyžaduje viacero certifikátov a kľúčov na overenie:
Súbor koreňového certifikátu (chain.crt)
Certifikát klienta
Kľúč klienta
Pre tento návod môžeme použiť nasledujúci súbor client.conf
a podľa toho do neho pridať požadované 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
Určenie správneho objektu
Každý poskytovateľ PKCS#11 môže podporovať viacero zariadení. Na zobrazenie zoznamu dostupných objektov môžete použiť nasledujúci príkaz:
$ 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
Každý pár certifikát/súkromný kľúč má jedinečný
Serialized id
reťazec. V konfiguračnom súbore by mal byť uvedený serializovaný id reťazec požadovaného certifikátu. Môžeme to urobiť pridaním možnostipkcs11-id
s použitím jednoduchých úvodzoviek.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
Pridanie získaného serializovaného ID do konfiguračného súboru
Pomocou obľúbeného textového editora otvorte súbor server.conf a pridajte nasledujúce riadky, pričom dbajte na to, aby ste vložili vlastné
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'
Pre ďalšie nastavenia súvisiace s OpenVPN autentizáciou môžete pridať aj niekoľko riadkov na správu kľúčov, hoci je to voliteľné.
Poznámka
Kliknutím zobrazíte kód
# 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
Voliteľný krok
Ak potrebujete otestovať konfiguráciu s tokenom a bez tokenu na Nitrokey, môžete pridať riadky do toho istého
client.conf
a príslušné riadky komentovať/nekomentovať podľa svojich potrieb:Poznámka
Kliknutím zobrazíte kód
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1
Konfigurácia klienta OpenVPN
Konečný konfiguračný súbor
client.conf
by mal vyzerať takto: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
Známe problémy
Existujú niektoré známe problémy súvisiace s prihlásením do OpenVPN pomocou OpenSC. Prosím, prečítajte si tieto problémy tu.
Spustenie klienta OpenVPN#
Spustenie služby OpenVPN v klientovi
Povoľte službu OpenVPN a spustite ju pomocou týchto príkazov:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.service
Ak chcete dvakrát skontrolovať, či je služba OpenVPN aktívna, použite tento príkaz:
$ sudo systemctl status openvpn-server@server.service
Zadajte svoj používateľský kód PIN
Pri spustení klienta OpenVPN je potrebné zadať PIN kód 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: ******
Varovanie
Bohužiaľ sa zdá, že OpenVPN nedokáže vytvoriť handshake a zastaví sa na chybe, ako je uvedené zde, zde a zde
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 niektorých hlásených prípadoch sa na termináli nevyžaduje zadanie kódu PIN. Jedným z riešení by bolo použitie tohto príkazu na prihlásenie pomocou kódu PIN:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>
Prípadne môžete prekompilovať klienta OpenVPN s vypnutou podporou systemd a ten vás podľa očakávania vyzve na zadanie kódu PIN.
Ďalšou možnosťou je prihlásiť sa do inštancie OpenVPN pomocou klienta Viscosity, ktorý poskytuje lepší používateľský komfort, najmä pri zadávaní kódu PIN.