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:

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
    
  2. Haal het commentaar weg of wijzig de volgende regel dienovereenkomstig

    net.ipv4.ip_forward=1
    
  3. 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:

  4. 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 -
    
  5. 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.

  6. 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
    
  2. 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
    
  2. 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.

  3. 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. The server, and each client, must have their own cert and key

    file. The server and all clients will use the same CA file.

  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.

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

  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
      

      (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=private
      
    2. Maak openvpn/ map onder certificate-authority/

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. 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
      
  2. 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
      
    2. 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
    
  2. Dan maken we als niet-root een directory aan voor Easy RSA genaamd Easy-RSA

    $ mkdir ~/easyrsa
    
  3. 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

While we keep the client.crtstored on the nitrokey Pro 2 device, we must retrieve the chain.crt file on the client machine, and store it in the adequate directory. We may use scp as in the method explained in the server section of this guide.

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'
    
  2. 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
    
  3. 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
    
  4. Configure OpenVPN (Windows only)

    Om een handdruk tot stand te brengen, moet u OpenSSL configureren dat is inbegrepen in OpenVPN.

    Create the directory ssl in C:\Program Files\OpenVPN and create file openssl.cnf with the following content :

    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.

  5. 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
    
  2. 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

    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.