Konfiguracija OpenVPN z Easy-RSA

Opomba

Ta vodnik je v nastajanju in bo sproti posodabljan. Upoštevajte to stanje.

Ta vodnik prikazuje, kako konfigurirati odjemalce OpenVPN za prijavo z uporabo Nitrokey Pro 2 ali Nitrokey Storage 2. Za upravljanje programskih ključev bomo uporabljali Easy-RSA, pripomoček, ki se je razvijal skupaj z OpenVPN.

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

Uporabili bomo Easy-RSA, ker se zdi, da zagotavlja določeno prilagodljivost in omogoča upravljanje ključev prek zunanjih PKI. Uporabili ga bomo v strežniku za izdajo zahteve za podpisovanje in enak postopek ponovili v odjemalcu. Zahteve za podpis potrdila bo podpisal CA v Nitorkeyjevem HSM ter jih ponovno poslal strežniku in odjemalcu.

Predpogoji

V naslednji dokumentaciji bomo potrebovali 3 različne stroje, kot sledi:

  • Strežnik OpenVPN (v. 2.5) na sistemu Debian 10 (virtualni stroj EC2 - AWS)

  • Odjemalec OpenVPN (v. 2.4.9) v operacijskem sistemu Fedora 30 (lokalni računalnik)

  • Overitelj bo dostopen iz samostojnega računalnika z operacijskim sistemom Fedora 30 (lokalni računalnik).

Za interakcijo z napravami potrebujemo OpenSC 0.20, nameščen na odjemalcu in računalniku CA (lokalni računalniki). Za namestitev lahko sledite navodilom v tehni povezavi (*Unix).

Za prenos odvisnosti na napravah Fedora lahko uporabimo to navodilo:

su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'

Za Debian Linux so na voljo novejši paketi OpenSC tudi.

Za upravljanje fizičnih ključev bomo uporabili naslednje Nitrokeys:

Če želite zgraditi overitelja potrdil v sistemu Nitrokey HSM 2, sledite navodilom, ki so na voljo v dokumentaciji.

Lahko pa nastavite svoj CA v na ločenem računalniku ali uporabite vadnico OpenVPN, ki se prav tako opira na Easy-RSA. Zadnji dve možnosti se zanašata na programske rešitve za upravljanje ključev.


Na strani strežnika

1. Namestite OpenVPN

  1. Najprej moramo omogočiti posredovanje IP z urejanjem datoteke /etc/sysctl.conf

    $ editor /etc/sysctl.conf
    
  2. Spustite komentar ali ustrezno uredite naslednjo vrstico

    net.ipv4.ip_forward=1
    
  3. Po shranjevanju ga zaprite in vnesite ta ukaz

    $ sysctl -p
    

    Ko bo posredovanje IP opravljeno, bomo morali prenesti najnovejšo izdajo OpenvPN za naš strežnik Debian 10 v skladu s temi navodili:

  4. Spremenite se v root in prenesite ključ GPG, ki je podpisal paket

    $ sudo -s
    # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
    
  5. V datoteko sources.list dodajte URL ustreznih paketov OpenVPN

    # echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
    # exit
    

    Prenesli smo OpenVPN 2.5, saj „poziv za geslo“ za prijavo zahteva vsaj OpenVPN različico 2.4.8.

  6. Nato prenesemo OpenVPN

    $ sudo apt install openvpn
    

    Če želite preveriti različico, lahko to storite tako, da pokličete --version in izpišete naslednje:

    $ sudo openvpn --version
    OpenVPN 2.5_beta3 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep  1 2020
    library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10
    Originally developed by James Yonan
    Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net>
    Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no \ enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=needless enable_fragment=yes enable_iproute2=yes \ enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes enable_maintainer_mode=no enable_management=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no \ enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no \ enable_shared=yes enable_shared_with_static_runtimes=no enable_silent_rules=no enable_small=no enable_static=yes enable_strict=no enable_strict_options=no \ enable_systemd=yes enable_werror=no enable_win32_dll=yes enable_x509_alt_username=yes with_aix_soname=aix with_crypto_library=openssl with_gnu_ld=yes \ with_mem_check=no with_sysroot=no
    

2. Namestite Easy-RSA

Za izgradnjo PKI bomo na strežnik in odjemalske računalnike prenesli najnovejšo različico Easy-RSA. Najnovejšo različico dobite tako, da obiščete stran Releases na uradnem projektu EasyRSA GitHub, kopirate povezavo za prenos datoteke, ki se konča z .tgz, in jo nato prilepite v naslednji ukaz:

  1. Prenesite najnovejšo različico

    $ cd ~
    $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
    
  2. Izvleček paketa tarball

    $ cd ~
    $ tar xvf EasyRSA-3.0.7.tgz
    $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
    

3. Ustvarite PKI za strežnik OpenVPN

Preden lahko ustvarite zasebni ključ in potrdilo strežnika OpenVPN, morate v strežniku OpenVPN ustvariti lokalni imenik infrastrukture javnih ključev. Ta imenik boste uporabljali za upravljanje zahtevkov za potrdila strežnika in odjemalcev, namesto da bi jih neposredno pošiljali v strežnik CA.

Če želite ustvariti imenik PKI v strežniku OpenVPN, morate datoteko z imenom vars napolniti z nekaj privzetimi vrednostmi.

  1. Ustvarite datoteko vars

    $ touch ~/easyrsa/vars
    $ cd easyrsa/
    $ editor vars
    
  2. Ko je datoteka odprta, prilepite naslednji dve vrstici

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    To sta edini dve vrstici, ki ju potrebujete v tej vars datoteki v strežniku OpenVPN, saj se ne bo uporabljala kot overitelj potrdil. Zagotovili bodo, da bodo vaši zasebni ključi in zahteve za potrdila konfigurirani tako, da bodo uporabljali kriptografijo eliptičnih krivulj (ECC) za generiranje ključev in varnih podpisov za vaše odjemalce in strežnik OpenVPN.

    Glede izbire kriptografskih algoritmov upoštevam model iz toga priročnika, lahko pa jih prilagodite glede na svoje posebne potrebe.

  3. Inicializacija infrastrukture PKI

    Ko izpolnite datoteko vars, lahko nadaljujete z ustvarjanjem imenika PKI. To storite tako, da zaženete skripto easyrsa z možnostjo init-pki:

    $ ./easyrsa init-pki
    

    Ko ste v strežniku OpenVPN inicializirali PKI, lahko preidete na naslednji korak, to je ustvarjanje zahteve za potrdilo strežnika OpenVPN in zasebnega ključa.

4. Ustvarite server.req in server.key

Zdaj, ko so v strežniku OpenVPN nameščeni vsi predpogoji, je naslednji korak ustvarjanje para ključev, ki ga sestavljata zasebni ključ (ki naj ostane skrivnost) in zahteva za podpis potrdila (.csr) v strežniku OpenVPN.

Na splošno v sistemih, kjer generiramo ključ in zahtevo, te datoteke ostanejo nešifrirane z uporabo argumenta nopass, saj se morajo strežniki običajno zagnati brez vnosa gesla. Tako se ustvari nešifriran ključ, zato skrbno zaščitite njegov dostop in dovoljenja za datoteke.

Nasvet

Opombe o konfiguraciji iz OpenVPN:

  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. Strežniško potrdilo mora vsebovati naslednje podatke:

  • keyUsage:  digitalSignature, keyEncipherment

  • extendedKeyUsage: serverAuth

  1. Ustvarite zahtevo za podpisovanje za strežnik

    Kot uporabnik brez korena pojdite v imenik ~/easyrsa v strežniku OpenVPN in vnesite naslednje ukaze:

    $ cd easyrsa/
    $ ./easyrsa gen-req server nopass
    

    To bo ustvarilo zasebni ključ za strežnik in datoteko z zahtevo za potrdilo z imenom server.req.

    Ko imate podpisano potrdilo, ga prenesite nazaj v strežnik OpenVPN.

  2. Kopiranje ključa v imenik strežnika OpenVPN

    $ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/
    

Po opravljenih korakih ste uspešno ustvarili zasebni ključ za strežnik OpenVPN. Ustvarili ste tudi zahtevo za podpis potrdila za strežnik OpenVPN.

Nasvet

Razširitve datotek za zahteve za podpisovanje potrdil

Razširitev datoteke, ki jo prevzameta CA in HSM tutorial, označuje ustvarjanje datoteke .csr, vendar Easy-RSA ustvarja zahteve za podpisovanje potrdil z razširitvijo .req.

Obe razširitvi bomo uporabljali izmenično, pri čemer bomo poskrbeli, da bomo organu za potrjevanje prenesli prave datoteke in ustvarili končno potrdilo z razširitvijo .crt.

V naslednjem razdelku tega vodnika bomo podpisali datoteko .req z našim CA, nameščenim v napravi HSM 2. V ta namen bom za podpisovanje zahtevkov uporabil namensko napravo.

5. Podpis in prevzem server.crt

Naslednja navodila zahtevajo prenos datoteke server.req (ali server.csr) v sistem CA.

Sam prenos ni varnostno občutljiv, čeprav je pametno preveriti, ali se prejeta datoteka ujema s pošiljateljevo kopijo, če prenos ni zaupanja vreden.

Pri izvajanju teh korakov se bom v veliki meri oprl na te navodila za podpisovanje zahtevkov za podpis potrdil, ko smo jih ustvarili z Easy-RSA.

  1. Podpisovanje datoteke server.req

    V lokalnem računalniku, namenjenem za dostop do HSM, bomo uporabili orodja, ki jih zagotavlja Opensc 0.20, za podpisovanje datoteke .req in jo poslali nazaj v strežnik OpenVPN. Predpostavljamo, da smo datoteko prenesli iz strežnikovega računalnika v računalnik CA.

    Najprej začnemo s priključitvijo ključa HSM Nitrokey in vnesemo to navodilo za seznam tipk, ki so na voljo.

    1. Poizvedba po seznamu razpoložljivih naprav

      $ p11tool --list-all
      

      (obvezen korak) Če prvič podpisujete potrdilo s CA, boste morda želeli pridobiti URI zasebnega ključa CA iz HSM in ga vključiti v konfiguracijsko datoteko.

      Opomba

      URI ključa mora biti v tej obliki:

      pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%E0%16%1C%C8%B6%F5%D6%6A%C6%83%5E%CD%EC%B6%23%FC%05%06%A6%75;object=root;type=private
      
    2. Ustvarite openvpn/ imenik pod certificate-authority/

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. Podpisati server.req

      $ openssl ca -config sign_server_csrs.ini -engine pkcs11 -keyform engine -days 375 -notext -md sha512 -create_serial -in server.req -out /home/user/pki/issued/server.crt
      
  2. Pridobite datoteko server.crt v strežniški računalnik

    1. Prenos podpisanih potrdil v strežnik

      Iz računalnika CA kopirajte datoteke server.crt in chain.crt v strežnik OpenVPN. V tem primeru bomo uporabili ukaz scp, kot sledi:

      $ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
      
    2. Potrdila namestite v imenik strežnika

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

      Opozorilo

      Potrdilo CA in chain.crt

      V zgornjem primeru CA vrne podpisano potrdilo sever in vključuje potrdilo CA CA.crt, ki je chain.crt. To je mogoče storiti prek nezanesljivega kanala, čeprav se odjemalcu priporoča, da potrdi, ali je prejeti chain.crt veljaven, če prenos ni zaupanja vreden.

      Datoteko chain.crt je mogoče preimenovati v CA.crt v ciljnem računalniku, vendar bomo v naslednjih navodilih uporabili chain.crt.

6. Konfiguracija strežnika OpenVPN

Povezava, ki uporablja TLS, zahteva več certifikatov in ključev za preverjanje pristnosti. Zdaj, ko smo jih izdali in podpisali, jih lahko postavimo v prave imenike. Razdelitev potrdil in ključev, ki se morajo nahajati v korenskem imeniku, je naslednja:

OpenVPN server

    - The root certificate file (CA.crt or chain.crt in our setup)
    - Server certificate
    - Server key
    - Diffie Hellman Parameters (optional)

V strežniku OpenVPN lahko zdaj ustvarite konfiguracijsko datoteko server.conf z najljubšim urejevalnikom besedila. Datoteko lahko konfigurirate v skladu s svojimi potrebami, mi pa poskrbimo, da spremenimo dele certifikata in ključa strežnika v skladu z imeni, ki ste jih izbrali za vaše datoteke, ki smo jih podpisali:

# OpenVPN Server Certificate - CA, server key and certificate
ca chain.crt
cert server.crt
key server.key

Tukaj je konfiguracijska datoteka, ki jo lahko uporabimo za testiranje teh navodil:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
tls-version-min 1.2 # Lower boundary for TLS version
tls-version-max 1.2 # Higher boundary for TLS version

Če želimo preveriti, ali konfiguracija deluje pravilno, lahko uporabimo ta ukaz:

$ sudo openvpn --server --config server.conf

7. Zagon storitve OpenVPN v strežniku

Omogočite storitev OpenVPN tako, da jo dodate v systemctl, in jo zaženite s temi ukazi:

$ sudo systemctl -f enable openvpn@server
$ sudo systemctl start openvpn@server

Za dvojno preverjanje, ali je storitev OpenVPN aktivna, uporabite ta ukaz:

$ sudo systemctl status openvpn@server

Na tej točki mora delovati OpenVPN.


Konfiguracija na strani odjemalca

1. Namestitev OpenVPN in Easy-RSA

  1. Namestitev programske opreme

    Za namestitev OpenVPN 2.4.9 in Easy-RSA 3.0.7 lahko neposredno uporabimo dnf install

    $ sudo dnf install openvpn easy-rsa
    
  2. Nato ustvarimo imenik za Easy RSA z imenom Easy-RSA

    $ mkdir ~/easyrsa
    
  3. in ga povežite s paketom Easy RSA, ki smo ga pravkar namestili

    $ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
    

2. Ustvarite PKI za odjemalca OpenVPN

Na enak način, kot smo ustvarili PKI v strežniku OpenVPN, bomo ustvarili PKI z uporabo Easy-RSA na strani odjemalca.

3. Ustvarite client.req in client.key

Na enak način, kot smo izdali par ključev v strežniku, ustvarimo par ključev za odjemalca, ki bo sestavljen iz datoteke client.req in datoteke client.key. Slednja mora biti v odjemalčevem računalniku tajna.

4. Podpisati client.req in izdati client.crt datoteko

Za prenos datoteke client.req v računalnik CA bomo uporabili enako metodo kot za datoteko server.req.

Po prenosu na računalniku CA podpišemo datoteko z zahtevo za podpis potrdila s tem ukazom

$ openssl ca -config sign_server_csrs.ini -engine pkcs11 -keyform engine -days 375 -notext -md sha512 -create_serial -in client.req -out /home/user/pki/issued/client.crt

5. Uvoz client.crt na Nitrokey iz naprave CA

Po ustvarjanju datoteke client.crt priključimo napravo Nitrokey Pro 2 v računalnik CA in uvozimo .crt v napravo Pro 2 s tem ukazom:

$ pkcs15-init --store-certificate client.crt --id 3

S tem ukazom lahko preverite, ali je ključ učinkovito shranjen v napravi Nitrokey:

$ pkcs15-tool -c

Ali pa

$ pkcs11-tool --list-objects

Za več ukazov se lahko obrnete na OpenSC wiki.

6. Pridobite datoteko chain.crt z računalnika CA

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. Konfigurirajte odjemalca za interakcijo z napravo Nitrokey

Zdaj bomo v odjemalskem računalniku priključili ključ Nitrokey Pro in z njim vzpostavili povezavo VPN s strežnikom. Na splošno velja, da povezava, ki uporablja protokol TLS, zahteva več potrdil in ključev za preverjanje pristnosti:

OpenVPN client
    - The root certificate file (`chain.crt`)
    - Client certificate
    - Client key

Za ta vodnik lahko uporabimo naslednjo datoteko client.conf in ji ustrezno dodamo zahtevane možnosti:

client
dev tun
proto udp
remote <server> 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
remote-cert-tls server
cipher AES-256-CBC
verb 3
redirect-gateway def1
tls-version-min 1.2 # Lower boundary for TLS version
tls-version-max 1.2 # Higher boundary for TLS version
  1. Določite pravilen predmet

    Vsak ponudnik PKCS#11 lahko podpira več naprav. Za ogled seznama razpoložljivih predmetov lahko uporabite naslednji ukaz:

    $ openvpn --show-pkcs11-ids /usr/lib64/pkcs11/opensc-pkcs11.so
    
    The following objects are available for use.
    Each object shown below may be used as parameter to
    
    --pkcs11-id option please remember to use single quote mark.
    
    Certificate
            DN:             CN=client
            Serial:         E53DA75C5B8F1518F520BCEF0128C09F
            Serialized id:  pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03
    

    Vsak par potrdilo/zasebni ključ ima edinstven Serialized id niz. V konfiguracijski datoteki je treba navesti serializiran niz id zahtevanega potrdila. To lahko storimo tako, da dodamo možnost pkcs11-id z uporabo enojnih narekovajev.

    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    
  2. Dodajanje pridobljenega serializiranega ID v konfiguracijsko datoteko

    Z najljubšim urejevalnikom besedila odprite datoteko server.conf in dodajte naslednje vrstice, pri čemer pazite, da vstavite svoje Serialized id:

    pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so
    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    

    Za dodatne nastavitve, povezane z avtentikacijo OpenVPN, lahko dodate tudi nekaj vrstic za upravljanje ključev, čeprav to ni obvezno.

    Opomba

    Kliknite za ogled kode

    # nitrokey config
    
    pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so
    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    # pkcs11-pin-cache 300
    # daemon
    # auth-retry nointeract
    # management-hold
    # management-signal
    # management 127.0.0.1 8888
    # management-query-passwords
    pkcs11-cert-private 1 # Prompt for PIN
    

    Izbirni korak

    Če želite preizkusiti konfiguracijo z žetonom na ključu Nitrokey in brez njega, lahko dodate vrstice v isti client.conf in po potrebi komentirate/odkomentirate ustrezne vrstice:

    Opomba

    Kliknite za ogled kode

    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  3. Konfiguracija odjemalca OpenVPN

    Končna konfiguracijska datoteka client.conf mora biti videti kot ta:

    client
    dev tun
    proto udp
    remote <server> 1194
    resolv-retry infinite
    nobind
    user nobody
    group nobody
    persist-key
    persist-tun
    ca ca.crt
    remote-cert-tls server
    cipher AES-256-CBC
    verb 3
    redirect-gateway def1
    tls-version-min 1.2 # Lower boundary for TLS version
    tls-version-max 1.2 # Higher boundary for TLS version
    
    # nitrokey login
    
    pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so
    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    # pkcs11-pin-cache 300
    # daemon
    # auth-retry nointeract
    # management-hold
    # management-signal
    # management 127.0.0.1 8888
    # management-query-passwords
    pkcs11-cert-private 1 # Prompt for PIN
    
    # OR
    
    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  4. Configure OpenVPN (Windows only)

    Da bi lahko vzpostavili handshake, morate konfigurirati OpenSSL, ki je vključen v OpenVPN.

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

    openssl_conf = default_conf

    [ default_conf ] ssl_conf = ssl_sect

    [ ssl_sect ] system_default = ssl_default_sect

    [ ssl_default_sect ] SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocol = TLSv1.2 MinProtocol = TLSv1.2

    S to spremembo ne boste imeli napak, o katerih poročajo tukaj, tukaj in tukaj.

  5. Znane težave

    Obstaja nekaj znanih težav, povezanih s prijavo v OpenVPN z OpenSC. Te težave si oglejte tudi.

8. Zagon odjemalca OpenVPN

  1. Zagon storitve OpenVPN v odjemalcu

    Omogočite storitev OpenVPN in jo zaženite s temi ukazi:

    $ sudo systemctl -f enable openvpn-server@server.service
    $ sudo systemctl start openvpn-server@server.service
    

    Če želite dvakrat preveriti, ali je storitev OpenVPN aktivna, uporabite ta ukaz:

    $ sudo systemctl status openvpn-server@server.service
    
  2. Vnesite uporabniško kodo PIN

    Pri izvajanju odjemalca OpenVPN je treba vnesti kodo PIN Nitrokey:

    $ sudo openvpn --client --config client.conf
    Fri Sep 11 17:42:01 2020 OpenVPN 2.4.9 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 24 2020
    Fri Sep 11 17:42:01 2020 library versions: OpenSSL 1.1.1g FIPS  21 Apr 2020, LZO 2.08
    Fri Sep 11 17:42:01 2020 PKCS#11: Adding PKCS#11 provider '/usr/lib64/pkcs11/opensc-pkcs11.so'
    Enter User PIN (OpenPGP card) token Password: ******
    

    Opozorilo

    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)
    

    V nekaterih primerih, o katerih so poročali, terminal ne zahteva vnosa kode PIN. To bi se dalo zaobiti tako, da bi se s tem ukazom prijavili s kodo PIN:

    $ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>
    

    Lahko pa ` ponovno sestavite odjemalca OpenVPN <https://forums.openvpn.net/viewtopic.php?f=4&t=23318>`__ z onemogočeno podporo systemd, ki vas bo po pričakovanjih pozval k vnosu kode PIN.

    Druga možnost je, da se v svoj primerek OpenVPN prijavite z odjemalcem Viscosity, ki zagotavlja boljšo uporabniško izkušnjo, zlasti pri vnosu kode PIN.