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.

Om de certificaten te ondertekenen gebruiken we een Nitrokey HSM 2 die is ingesteld als Certificate Authority, deze gids gaat echter niet in op het opzetten van de CA zelf (dit is duidelijk en goed gedocumenteerd hier).

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:

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#

  1. Eerst moeten we IP forwarding inschakelen door het bestand /etc/sysctl.conf te bewerken

$ editor /etc/sysctl.conf
  1. Haal het commentaar weg of wijzig de volgende regel dienovereenkomstig

net.ipv4.ip_forward=1
  1. Sluit na het opslaan, en voer dit commando in

$ sysctl -p

Zodra IP forwarding gedaan is, moeten we de laatste versie van OpenvPN downloaden voor onze Debian 10 server, volgens deze instructies:

  1. 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 -
  1. 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
# exit

We 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.

  1. Vervolgens downloaden we OpenVPN

$ sudo apt install openvpn

Als 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:

  1. Download de laatste versie

$ cd ~
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
  1. Pak 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.

  1. Maak een vars bestand

$ touch ~/easyrsa/vars
$ cd easyrsa/
$ editor vars
  1. Als 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.

  1. 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-pki

Nadat 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:

  1. De server, en elke client, moeten hun eigen cert en key bestand hebben. De server en alle clients zullen hetzelfde CA-bestand gebruiken.

  2. Het certificaat van de server moet het volgende hebben:

  • keyUsage:  digitalSignature, keyEncipherment

  • extendedKeyUsage: serverAuth

  1. 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 nopass

Dit 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.

  1. 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 (of server.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.

5.1. Onderteken het server.req bestand#

Op 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.

  1. De lijst van beschikbare apparaten opvragen

  $ p11tool --list-all

**(Required step)** If this is the first time you sign a certificate with the CA, you might want to retrieve the URI of the CA’s private key from the HSM, and include it in the config file.
  • 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=private
  1. Maak openvpn/ map onder certificate-authority/

$ mkdir/opt/certificate-authority/
$ cd /opt/certificate-authority/
  1. 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.crt

5.2. Ophalen van het server.crt bestand naar de server machine#

  1. Breng de ondertekende certificaten over naar de server

Kopieer vanaf de CA machine de bestanden server.crt en chain.crt naar de OpenVPN server. In dit voorbeeld gebruiken we het scp commando als volgt:

$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
  1. Plaats de certificaten in de map van de server

$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/server

Waarschuwing

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 het chain.crt bestand is. Dit kan over een onveilig kanaal, maar de client wordt aangemoedigd om te bevestigen of de ontvangen chain.crt geldig is, als het transport niet vertrouwd is.

Het is mogelijk om het bestand chain.crt te hernoemen naar CA.crt op de doelmachine, maar we zullen chain.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.key

Hier 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 version

Om 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@server

Om dubbel te controleren of de OpenVPN service actief is, gebruik dit commando:

$ sudo systemctl status openvpn@server

De OpenVPN zou op dit punt moeten draaien.


Client-zijde configuratie#

1. Installeer OpenVPN en Easy-RSA#

  1. 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-rsa
  1. Dan maken we als niet-root een directory aan voor Easy RSA genaamd Easy-RSA

$ mkdir ~/easyrsa
  1. En 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 het client.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 het server.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 3

Je kunt zien of de sleutel effectief op de Nitrokey is opgeslagen met dit commando:

$ pkcs15-tool -c

Of anders

$ pkcs11-tool --list-objects

Voor meer commando’s kunt u de OpenSC wiki raadplegen.

6. Haal het chain.crt bestand op van de CA machine#

Terwijl we het client.crtstored on the nitrokey Pro 2 device, we must retrieve the chain.crt bestand op de client machine bewaren, en het in de juiste directory opslaan. We kunnen scp 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 key

Voor 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
  1. 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=%03

Elk 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 optie pkcs11-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'
  1. 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 PIN

Optionele 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 1
  1. De 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 1
  1. Bekende problemen

Er zijn enkele bekende problemen met betrekking tot OpenVPN login met OpenSC. Raadpleeg deze problemen hier.

8. Start de OpenVPN-client#

  1. 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.service

Om dubbel te controleren of de OpenVPN service actief is, gebruik dit commando:

$ sudo systemctl status openvpn-server@server.service
  1. Voer 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

Helaas lijkt OpenVPN niet in staat te zijn een handshake tot stand te brengen en stopt bij een foutmelding zoals hier, hier <x id=”227”></x id=”295”></x> en `hier

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.