OpenVPN configuratie met Easy-RSA#
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Notitie
Deze gids is werk in uitvoering, en zal regelmatig worden bijgewerkt. Houdt u alstublieft rekening met deze status.
Deze handleiding toont hoe u OpenVPN-clients kunt configureren om in te loggen met een Nitrokey Pro 2 of een Nitrokey Storage 2. Voor software sleutelbeheer zullen we Easy-RSA gebruiken, een hulpprogramma dat zich samen met OpenVPN heeft ontwikkeld.
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).
We gebruiken Easy-RSA, omdat het enige flexibiliteit lijkt te bieden, en sleutelbeheer via externe PKI’s mogelijk maakt. We gebruiken het op de server om het ondertekenverzoek te doen, en herhalen hetzelfde proces op de client. De verzoeken om ondertekening van certificaten worden door de CA op de Nitorkey HSM ondertekend en opnieuw naar de server en de cliënt gezonden.
Vereisten#
In de volgende documentatie hebben we 3 verschillende machines nodig, als volgt:
OpenVPN-server (v. 2.5) op Debian 10 (EC2 virtuele machine - AWS)
OpenVPN client (v. 2.4.9) op Fedora 30 (lokale machine)
De Certificate Authority zal toegankelijk zijn vanaf een standalone machine met Fedora 30 (lokale machine)
Om met de apparaten te kunnen communiceren hebben we OpenSC 0.20 nodig, geïnstalleerd op de client en CA machine (de lokale machines). U kunt de instructies volgen om dit in te stellen in deze link (*Unix).
Om de afhankelijkheden te downloaden op Fedora machines kunnen we deze instructie volgen:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Voor Debian Linux zijn recentere OpenSC-pakketten beschikbaar hier.
We zullen de volgende Nitrokeys gebruiken voor het fysieke sleutelbeheer:
Een authenticatiesleutel met de Nitrokey Pro 2 (pdf)
Een certificeringsinstantie (CA) die gebruikmaakt van de Nitrokey HSM 2 (pdf)
Ter herinnering, om een Certificaat Autoriteit op Nitrokey HSM 2 te bouwen, kunt u de beschikbare instructies ` in de documentatie <certificate-authority.html#sign-a-server-certificate>`_ volgen.
Als alternatief kunt u uw eigen CA opzetten op een ` op een aparte machine <https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-ubuntu-20-04>`_, of u kunt de OpenVPN tutorial gebruiken die ook vertrouwt op Easy-RSA. De laatste 2 opties vertrouwen op software oplossingen voor sleutelbeheer.
Serverzijde#
1. Installeer OpenVPN#
Eerst moeten we IP forwarding inschakelen door het bestand
/etc/sysctl.conf
te bewerken$ editor /etc/sysctl.confHaal het commentaar weg of wijzig de volgende regel dienovereenkomstig
net.ipv4.ip_forward=1Sluit na het opslaan, en voer dit commando in
$ sysctl -pZodra IP forwarding gedaan is, moeten we de laatste versie van OpenvPN downloaden voor onze Debian 10 server, volgens deze instructies:
Ga naar root en download de GPG sleutel die het pakket ondertekende
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -Voeg de URL van de geschikte OpenVPN pakketten toe aan het
sources.list
bestand# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitWe hebben OpenVPN 2.5 gedownload omdat “password prompt” minstens OpenVPN ` versie 2.4.8 <https://community.openvpn.net/openvpn/ticket/1215>`_ vereist om in te loggen.
Vervolgens downloaden we OpenVPN
$ sudo apt install openvpnAls u de versie wilt controleren, kan dat door
--version
aan te roepen en het volgende af te drukken:$ 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. Installeer Easy-RSA#
Om de PKI te bouwen, zullen we de laatste versie van Easy-RSA downloaden op de server en client machines. Om de laatste versie te krijgen, ga je naar de Releases pagina op het officiële EasyRSA GitHub project, kopieer je de download link voor het bestand dat eindigt op
.tgz
, en plak je deze in het volgende commando:
Download de laatste versie
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzPak de tarball uit
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Maak een PKI voor OpenVPN server#
Voordat u de private sleutel en het certificaat van uw OpenVPN server kunt aanmaken, moet u een lokale Public Key Infrastructure directory aanmaken op uw OpenVPN server. U zult deze directory gebruiken om de certificaataanvragen van de server en clients te beheren, in plaats van ze direct op uw CA server te doen.
Om een PKI directory op uw OpenVPN server te bouwen, moet u een bestand met de naam
vars
vullen met enkele standaardwaarden.
Maak een
vars
bestand$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsAls het bestand geopend is, plak dan de volgende twee regels in
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Dit zijn de enige twee regels die u nodig heeft in dit
vars
bestand op uw OpenVPN server aangezien het niet gebruikt zal worden als een Certificaat Autoriteit. Zij zullen ervoor zorgen dat uw private sleutels en certificaataanvragen geconfigureerd zijn om Elliptic Curve Cryptography (ECC) te gebruiken om sleutels te genereren, en veilige handtekeningen voor uw clients en OpenVPN server.Wat de keuze van de cryptografische algoritmen betreft, volg ik het model in deze handleiding, en u kunt deze aanpassen aan uw specifieke behoeften.
De PKI initialiseren
Zodra u het
vars
bestand heeft gevuld, kunt u verder gaan met het aanmaken van de PKI directory. Draai hiervoor het easyrsa script met de init-pki optie:$ ./easyrsa init-pkiNadat u uw PKI op de OpenVPN server hebt geïnitialiseerd, bent u klaar om over te gaan naar de volgende stap, namelijk het aanmaken van een OpenVPN server certificaataanvraag en private sleutel.
4. Maak server.req
en server.key
.#
Nu dat uw OpenVPN server alle vereisten heeft geïnstalleerd, is de volgende stap het genereren van een sleutelpaar bestaande uit een private sleutel (om geheim te houden), en een Certificate Signing Request (
.csr
) op uw OpenVPN server.In het algemeen, op systemen waar we een sleutel en verzoek genereren, worden deze bestanden onversleuteld gelaten door het
nopass
argument te gebruiken, aangezien servers meestal moeten opstarten zonder enige wachtwoordinvoer. Dit genereert een onversleutelde sleutel, dus let op beveilig de toegang en bestandspermissies ervan zorgvuldig.Tip
Configuratie nota’s van 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.
Het certificaat van de server moet het volgende hebben:
keyUsage: digitalSignature, keyEncipherment
extendedKeyUsage: serverAuth
Maak de ondertekeningsaanvraag voor de server
Navigeer naar de
~/easyrsa
directory op uw OpenVPN Server als uw niet-root gebruiker, en voer de volgende commando’s in:$ cd easyrsa/ $ ./easyrsa gen-req server nopassDit zal een private sleutel voor de server aanmaken en een certificaat aanvraag bestand genaamd
server.req
.Zodra u een ondertekend certificaat hebt, brengt u het terug naar de OpenVPN server.
Kopieer de sleutel naar de OpenVPN server directory
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/Na het voltooien van deze stappen, heeft u met succes een private sleutel voor uw OpenVPN server aangemaakt. U heeft ook een Certificate Signing Request gegenereerd voor de OpenVPN server.
Tip
Bestandsextensies voor verzoeken om ondertekening van certificaten
De bestandsextensie die door de CA- en HSM-handleiding wordt gebruikt, geeft aan dat er een
.csr
bestand moet worden aangemaakt, maar Easy-RSA maakt certificaatondertekeningsverzoeken aan met een.req
extensie.We zullen beide extensies door elkaar gebruiken, terwijl we ervoor zorgen dat we de juiste bestanden naar de Certificate Authority sturen, en een definitief certificaat genereren met een
.crt
extensie.In de volgende sectie van deze gids zullen we een
.req
bestand ondertekenen met onze CA die op het HSM 2 apparaat is geïnstalleerd. Voor dit doel zal ik een speciale machine gebruiken om de verzoeken te ondertekenen.
5. Tekenen en ophalen server.crt
#
De volgende instructies vereisen de overdracht van het
server.req
(ofserver.csr
) bestand naar het CA systeem.De overdracht zelf is niet gevoelig voor beveiliging, hoewel het verstandig is te controleren of het ontvangen bestand overeenkomt met de kopie van de afzender, als het transport niet vertrouwd is.
Om deze stappen te doorlopen, zal ik uitvoerig gebruik maken van deze instructies, om de verzoeken voor het ondertekenen van de certificaten te ondertekenen, nadat we ze met Easy-RSA hebben gegenereerd.
Onderteken het
server.req
bestandOp de lokale machine voor toegang tot de HSM zullen we de tools van Opensc 0.20 gebruiken om het
.req
bestand te ondertekenen, en het terug te sturen naar de OpenVPN server. We nemen aan dat we het bestand hebben overgebracht van de server machine naar de CA machine.We beginnen met het aansluiten van de HSM Nitrokey, en voeren deze instructie in om de beschikbare toetsen op te sommen.
De lijst van beschikbare apparaten opvragen
$ p11tool --list-all(Verplichte stap) Als dit de eerste keer is dat u een certificaat ondertekent met de CA, wilt u misschien de URI van de private sleutel van de CA ophalen van de HSM en deze opnemen in het configuratiebestand.
Notitie
De URI van de sleutel moet in dit formaat zijn:
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=privateMaak
openvpn/
map ondercertificate-authority/
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Onderteken de
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.crt5.2. Ophalen van het
server.crt
bestand naar de server machine
Breng de ondertekende certificaten over naar de server
Kopieer vanaf de CA machine de bestanden
server.crt
enchain.crt
naar de OpenVPN server. In dit voorbeeld gebruiken we hetscp
commando als volgt:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpPlaats de certificaten in de map van de server
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverWaarschuwing
CA Certificaat en
chain.crt
In het bovenstaande stuurt de CA het ondertekende sever certificaat terug, en voegt het CA certificaat
CA.crt
bij, dat hetchain.crt
bestand is. Dit kan over een onveilig kanaal, maar de client wordt aangemoedigd om te bevestigen of de ontvangenchain.crt
geldig is, als het transport niet vertrouwd is.Het is mogelijk om het bestand
chain.crt
te hernoemen naarCA.crt
op de doelmachine, maar we zullenchain.crt
gebruiken in de volgende instructies.
6. Configureer de OpenVPN server#
Een verbinding die gebruik maakt van TLS vereist meerdere certificaten en sleutels voor authenticatie. Nu dat we deze hebben uitgegeven en ondertekend, kunnen we ze in de juiste directories plaatsen. De verdeling van de certificaten en sleutels die in de root directory moeten staan zijn de volgende:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)Op uw OpenVPN server kunt u nu het configuratiebestand
server.conf
aanmaken met uw favoriete tekst editor. Het bestand kan worden geconfigureerd volgens uw behoeften, terwijl wij ervoor zorgen om de server certificaat en sleutel secties te wijzigen volgens de namen die u hebt gekozen voor de uw de bestanden die we hebben ondertekend:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keyHier is het configuratiebestand dat we kunnen gebruiken om deze instructies te testen:
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 versionOm te testen of de configuratie goed werkt, kunnen we dit commando gebruiken:
$ sudo openvpn --server --config server.conf
7. Start de OpenVPN service op de server#
Schakel de OpenVPN service in door het toe te voegen aan systemctl, en start het met deze commando’s:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverOm dubbel te controleren of de OpenVPN service actief is, gebruik dit commando:
$ sudo systemctl status openvpn@serverDe OpenVPN zou op dit punt moeten draaien.
Client-zijde configuratie#
1. Installeer OpenVPN en Easy-RSA#
Installeer de software
We kunnen direct
dnf install
gebruiken om OpenVPN 2.4.9 en Easy-RSA 3.0.7 te installeren$ sudo dnf install openvpn easy-rsaDan maken we als niet-root een directory aan voor Easy RSA genaamd
Easy-RSA
$ mkdir ~/easyrsaEn koppel het aan het Easy RSA pakket dat we net geïnstalleerd hebben
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Maak een PKI voor de OpenVPN-cliënt#
Op dezelfde manier als we een PKI op de OpenVPN server hebben gemaakt, zullen we een PKI met Easy-RSA aan de cliëntzijde maken.
3. Maak een client.req
en client.key
#
Op dezelfde manier als we het sleutelpaar op de sever hebben uitgegeven, genereren we een sleutelpaar voor de client dat zal bestaan uit het
client.req
bestand en hetclient.key
bestand. Dit laatste moet op de client machine geheim worden gehouden.
4. Onderteken client.req
en geef het client.crt
bestand uit#
Om het
client.req
bestand naar de CA machine over te brengen, zullen we dezelfde methode gebruiken als we voor hetserver.req
bestand deden.Na de overdracht ondertekenen we op de CA-machine het bestand met het verzoek om ondertekening van het certificaat met dit commando
$ 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. Importeer client.crt
op de Nitrokey van de CA machine#
Nadat we het
client.crt
bestand hebben gemaakt, sluiten we het Nitrokey Pro 2 apparaat aan op de CA machine, en importeren we het.crt
naar het Pro 2 apparaat met dit commando:$ pkcs15-init --store-certificate client.crt --id 3Je kunt zien of de sleutel effectief op de Nitrokey is opgeslagen met dit commando:
$ pkcs15-tool -cOf anders
$ pkcs11-tool --list-objectsVoor meer commando’s kunt u de OpenSC wiki raadplegen.
6. Haal het chain.crt
bestand op van de CA machine#
Terwijl we het
client.crt
stored on the nitrokey Pro 2 device, we must retrieve thechain.crt
bestand op de client machine bewaren, en het in de juiste directory opslaan. We kunnenscp
gebruiken zoals in de methode uitgelegd in het server-gedeelte van deze gids.
7. Configureer de client voor interactie met de Nitrokey#
Nu, terug op de client-machine, zullen we de Nitrokey Pro aansluiten en gebruiken om de VPN-verbinding met de server tot stand te brengen. In het algemeen zijn voor een verbinding die gebruik maakt van TLS meerdere certificaten en sleutels nodig voor de authenticatie:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keyVoor deze gids kunnen we het volgende
client.conf
bestand, en de vereiste opties dienovereenkomstig toevoegen: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
Bepaal het juiste object
Elke PKCS#11 provider kan meerdere apparaten ondersteunen. Om de lijst met beschikbare objecten te bekijken, kun je het volgende commando gebruiken:
$ 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=%03Elk certificaat/privésleutelpaar heeft een unieke
Serialized id
string. De geserialiseerde id-string van het aangevraagde certificaat moet in het configuratiebestand worden gespecificeerd. We kunnen dit doen door de optiepkcs11-id
toe te voegen met enkele aanhalingstekens.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Voeg de opgehaalde geserialiseerde ID toe aan het configuratiebestand
Open met uw favoriete teksteditor het bestand server.conf en voeg de volgende regels toe, waarbij u erop let dat u uw eigen
Serialized id
invoegt: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'Voor bijkomende instellingen in verband met OpenVPN authenticatie, kunt u ook enkele lijnen toevoegen om sleutelbeheer af te handelen, hoewel dit optioneel is.
Notitie
Klik om de code te bekijken
# 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 PINOptionele stap
Als u de configuratie moet testen, met en zonder het token op de Nitrokey, kunt u regels toevoegen aan dezelfde
client.conf
en de relevante regels becommentariëren/oncommentariëren naargelang uw behoeften:Notitie
Klik om de code te bekijken
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1De OpenVPN-client configureren
Het uiteindelijke configuratiebestand
client.conf
zou er als volgt uit moeten zien: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)
Om een handdruk tot stand te brengen, moet u OpenSSL configureren dat is inbegrepen in OpenVPN.
Maak de directory
ssl
inC:\Program Files\OpenVPN
en maak bestandopenssl.cnf
met de volgende inhoud :openssl_conf = standaard_conf
[standaard_conf ] ssl_conf = ssl_sect
[ssl_sect ] system_default = ssl_default_sect
[ssl_default_sect] HandtekeningAlgoritmen = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocol = TLSv1.2 MinProtocol = TLSv1.2
Met deze wijziging heb je geen fout zoals gemeld op hier, hier en hier.
Bekende problemen
Er zijn enkele bekende problemen met betrekking tot OpenVPN login met OpenSC. Raadpleeg deze problemen hier.
8. Start de OpenVPN-client#
Start de OpenVPN-dienst op de client
Schakel de OpenVPN service in, en start het met deze commando’s:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.serviceOm dubbel te controleren of de OpenVPN service actief is, gebruik dit commando:
$ sudo systemctl status openvpn-server@server.serviceVoer uw gebruikers-PIN in
Bij het uitvoeren van OpenVPN client, moet Nitrokey’s PIN ingevoerd worden:
$ 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: ******Waarschuwing
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)In sommige gerapporteerde gevallen wordt niet om een PIN gevraagd op de terminal. Een workaround zou zijn om dit commando te gebruiken om in te loggen met de PIN:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Als alternatief kunt u ` de OpenVPN <https://forums.openvpn.net/viewtopic.php?f=4&t=23318>`_ client opnieuw compileren met systemd ondersteuning uitgeschakeld, en deze zal u zoals verwacht om de PIN vragen.
Een andere optie zou zijn om in te loggen op uw OpenVPN instance met de Viscosity client die een betere gebruikerservaring biedt, vooral voor het invoeren van de PIN.