OpenVPN konfiguráció az Easy-RSA-val#

Megjegyzés

Ez az útmutató folyamatban lévő munka, és megfelelően frissül. Kérjük, vegye figyelembe ezt az állapotot.

Ez az útmutató azt mutatja be, hogyan kell konfigurálni az OpenVPN-ügyfeleket, hogy bejelentkezzenek egy Nitrokey Pro 2 vagy egy Nitrokey Storage 2 használatával. A szoftveres kulcskezeléshez az Easy-RSA segédprogramot fogjuk használni, amely az OpenVPN mellett fejlődött.

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

Az Easy-RSA-t fogjuk használni, mivel úgy tűnik, hogy némi rugalmasságot biztosít, és lehetővé teszi a kulcsok külső PKI-ken keresztül történő kezelését. Ezt fogjuk használni a szerveren az aláírási kérés kibocsátásához, és ugyanezt a folyamatot megismételjük az ügyfélnél. A tanúsítvány aláírási kérelmeket a Nitorkey HSM-en lévő hitelesítésszolgáltató írja alá, majd újra továbbítja a szerverre és az ügyfélre.

Előfeltételek#

A következő dokumentációban 3 különböző gépre lesz szükségünk a következők szerint:

  • OpenVPN szerver (v. 2.5) Debian 10-en (EC2 virtuális gép - AWS)

  • OpenVPN kliens (v. 2.4.9) Fedora 30-on (helyi gép)

  • A tanúsítványkiadó hatóság elérhető lesz egy önálló Fedora 30-as gépről (helyi gép).

Az eszközökkel való interakcióhoz szükségünk lesz az OpenSC 0.20 telepítve a kliens és a CA gépre (a helyi gépekre). A beállításhoz követheti a `ezen a linken (*Unix) <https://github.com/OpenSC/OpenSC/wiki/Compiling-and-Installing-on-Unix-flavors><https://github.com/OpenSC/OpenSC/wiki/Compiling-and-Installing-on-Unix-flavors>`__ található utasításokat.

A függőségek letöltéséhez Fedora gépeken ezt az utasítást használhatjuk:

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

Debian Linuxhoz újabb OpenSC csomagok állnak rendelkezésre itt.

A fizikai kulcsok kezeléséhez a következő Nitrokeys-t fogjuk használni:

Emlékeztetőül, a Nitrokey HSM 2 tanúsítványszolgáltató létrehozásához kövesse a ` dokumentációban <certificate-authority.html#sign-a-server-certificate>`_ található utasításokat.

Alternatívaként beállíthatja saját hitelesítésszolgáltatóját egy egy külön gépen, vagy használhatja az OpenVPN bemutatót, amely szintén az Easy-RSA-ra támaszkodik. Az utolsó 2 lehetőség a kulcskezeléshez szoftveres megoldásokra támaszkodik.


Kiszolgálói oldal#

1. Telepítse az OpenVPN-t#

  1. Először is engedélyeznünk kell az IP-továbbítást a /etc/sysctl.conf fájl szerkesztésével.

    $ editor /etc/sysctl.conf
    
  2. Vegye ki a megjegyzést, vagy ennek megfelelően szerkessze a következő sort

    net.ipv4.ip_forward=1
    
  3. Zárja be a mentés után, és adja meg ezt a parancsot

    $ sysctl -p
    

    Miután az IP-továbbítás megtörtént, le kell töltenünk az OpenvPN legújabb kiadását a Debian 10-es szerverünkre, az ezen utasítások szerint:

  4. Váltson root jogosultságot, és töltse le a csomagot aláíró GPG kulcsot.

    $ sudo -s
    # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
    
  5. Adja hozzá a megfelelő OpenVPN csomagok URL címét a sources.list fájlhoz.

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

    Letöltöttük az OpenVPN 2.5-öt, mivel a „jelszó kérés” legalább OpenVPN verzió 2.4.8 verziót igényel a bejelentkezéshez.

  6. Ezután letölthetjük az OpenVPN-t

    $ sudo apt install openvpn
    

    Ha ellenőrizni szeretné a verziót, akkor a --version meghívásával és a következő kiírásával lehetséges:

    $ 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. Telepítse az Easy-RSA-t#

A PKI létrehozásához letölthetjük az Easy-RSA legújabb verzióját a szerver és az ügyfélgépekre. A legfrissebb kiadás beszerzéséhez lépjünk a hivatalos EasyRSA GitHub projekt Releases oldalára, másoljuk ki a .tgz végződésű fájl letöltési linkjét, majd illesszük be a következő parancsba:

  1. A legújabb kiadás letöltése

    $ cd ~
    $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
    
  2. Csomagolja ki a tarballt

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

3. PKI létrehozása az OpenVPN-kiszolgálóhoz#

Mielőtt létrehozhatná az OpenVPN-kiszolgáló privát kulcsát és tanúsítványát, létre kell hoznia egy helyi nyilvános kulcsinfrastruktúra könyvtárat az OpenVPN-kiszolgálón. Ezt a könyvtárat fogja használni a kiszolgáló és az ügyfelek tanúsítványkérelmeinek kezelésére, ahelyett, hogy közvetlenül a hitelesítésszolgáltatói kiszolgálón tenné meg azokat.

Az OpenVPN-kiszolgálón lévő PKI könyvtár létrehozásához fel kell töltenie egy vars nevű fájlt néhány alapértelmezett értékkel.

  1. Hozzon létre egy vars fájlt.

    $ touch ~/easyrsa/vars
    $ cd easyrsa/
    $ editor vars
    
  2. Miután megnyitottuk a fájlt, illesszük be a következő két sort

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    Ez az egyetlen két sor, amire szükséged van ebben a vars fájlban az OpenVPN-kiszolgálón, mivel nem fogod használni a Tanúsítványkezelőként. Biztosítani fogják, hogy a privát kulcsok és a tanúsítványkérelmek úgy legyenek beállítva, hogy az Elliptikus görbe kriptográfiát (ECC) használják a kulcsok és a biztonságos aláírások létrehozásához az ügyfelek és az OpenVPN-kiszolgáló számára.

    Ami a kriptográfiai algoritmusok kiválasztását illeti, én a ezen útmutatóban található modellt követem, és ezeket a saját igényeidnek megfelelően testre szabhatod.

  3. A PKI inicializálása

    Miután feltöltötte a vars fájlt, folytathatja a PKI könyvtár létrehozását. Ehhez futtassa az easyrsa szkriptet az init-pki opcióval:

    $ ./easyrsa init-pki
    

    Miután inicializálta a PKI-t az OpenVPN-kiszolgálón, készen áll a következő lépésre, amely az OpenVPN-kiszolgáló tanúsítványkérelmének és privát kulcsának létrehozása.

4. Hozzon létre server.req és server.key.#

Most, hogy az OpenVPN-kiszolgálója rendelkezik az összes előfeltétel telepítésével, a következő lépés egy kulcspár létrehozása, amely egy (titokban tartandó) privát kulcsból és egy tanúsítvány aláírási kérelemből (.csr) áll az OpenVPN-kiszolgálón.

Általánosságban elmondható, hogy azokon a rendszereken, ahol kulcsot és kérést generálunk, ezeket a fájlokat a nopass argumentummal titkosítatlanul hagyjuk, mivel a szervereknek általában jelszó bevitele nélkül kell elindulniuk. Ez egy nem titkosított kulcsot generál, ezért figyeljünk oda gondosan a hozzáférési és fájlengedélyekre.

Javaslat

Konfigurációs megjegyzések az OpenVPN-től:

  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. A szervertanúsítványnak a következőkkel kell rendelkeznie:

  • keyUsage:  digitalSignature, keyEncipherment<x>

  • extendedKeyUsage: serverAuth

  1. Létrehozza az aláírási kérelmet a kiszolgáló számára

    Navigáljon a ~/easyrsa könyvtárba az OpenVPN-kiszolgálón nem root felhasználóként, és adja meg a következő parancsokat:

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

    Ez létrehoz egy privát kulcsot a kiszolgálóhoz és egy server.req nevű tanúsítványkérő fájlt.

    Ha már rendelkezik az aláírt tanúsítvánnyal, akkor továbbítja azt vissza az OpenVPN-kiszolgálóra.

  2. Másolja a kulcsot az OpenVPN-kiszolgáló könyvtárába

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

A fenti lépések elvégzése után sikeresen létrehozott egy privát kulcsot az OpenVPN-kiszolgálójához. Az OpenVPN-kiszolgálóhoz tanúsítványaláírási kérelmet is generált.

Javaslat

Fájlkiterjesztések a tanúsítvány aláírási kérelmekhez

A hitelesítésszolgáltató és a HSM oktatóprogram által elfogadott fájlkiterjesztés .csr fájl létrehozását jelzi, az Easy-RSA azonban .req kiterjesztésű tanúsítvány aláírási kérelmeket hoz létre.

Mindkét kiterjesztést felváltva fogjuk használni, miközben gondoskodunk arról, hogy a megfelelő fájlokat továbbítsuk a Tanúsítványkezelőhöz, és létrehozzuk a végső tanúsítványt .crt kiterjesztéssel.

Az útmutató következő részében egy .req fájlt fogunk aláírni a HSM 2 eszközön telepített hitelesítésszolgáltatóval. Erre a célra egy dedikált gépet fogok használni a kérések aláírására.

5. Aláírás és visszakeresés server.crt#

A következő utasítások a server.req (vagy server.csr) fájlnak a CA rendszerbe történő átvitelét igénylik.

Maga az átvitel nem érzékeny a biztonságra, bár bölcs dolog ellenőrizni, hogy a fogadott fájl megegyezik-e a feladó másolatával, ha a szállítás nem megbízható.

Ahhoz, hogy végigmenjünk ezeken a lépéseken, nagymértékben támaszkodni fogok a ezen utasításokra, hogy aláírjuk a tanúsítvány aláírási kérelmeket, miután az Easy-RSA-val generáltuk őket.

  1. Írja alá a server.req fájlt

    A HSM elérésére szolgáló helyi gépen az Opensc 0.20 által biztosított eszközökkel aláírjuk a .req fájlt, és visszaküldjük az OpenVPN szervernek. Feltételezzük, hogy a kiszolgáló gépről a CA gépére továbbítottuk a fájlt.

    Először is kezdjük a HSM Nitrokey csatlakoztatásával, és adjuk meg ezt az utasítást a rendelkezésre álló kulcsok felsorolásához.

    1. Az elérhető eszközök listájának lekérdezése

      $ p11tool --list-all
      

      (Kötelező lépés) Ha ez az első alkalom, hogy tanúsítványt ír alá a hitelesítésszolgáltatóval, érdemes lekérni a hitelesítésszolgáltató privát kulcsának URI-jét a HSM-ből, és beilleszteni a konfigurációs fájlba.

      Megjegyzés

      A kulcs URI-jának ebben a formátumban kell lennie:

      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. openvpn/ könyvtár létrehozása a certificate-authority/ alatt.

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. Írja alá a server.req<x>

      $ 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. A server.crt fájl letöltése a kiszolgáló gépre.

    1. Az aláírt tanúsítványok átvitele a kiszolgálóra

      A hitelesítésszolgáltató gépéről másolja a server.crt és chain.crt fájlokat az OpenVPN-kiszolgálóra. Ebben a példában a scp parancsot fogjuk használni a következők szerint:

      $ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
      
    2. Helyezze el a tanúsítványokat a kiszolgáló könyvtárában

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

      Figyelem

      CA tanúsítvány és chain.crt<x>

      A fenti esetben a hitelesítésszolgáltató visszaküldi az aláírt sever tanúsítványt, és tartalmazza a CA.crt hitelesítésszolgáltatói tanúsítványt, amely a chain.crt fájl. Ez történhet nem biztonságos csatornán keresztül is, bár az ügyfélnek ajánlott megerősíteni, hogy a kapott chain.crt érvényes-e, ha a szállítás nem megbízható.

      Lehetőség van a chain.crt fájl átnevezésére CA.crt fájlra a célgépen, azonban a chain.crt-t fogjuk használni a következő utasításokban.

6. Az OpenVPN-kiszolgáló konfigurálása#

A TLS-t használó kapcsolat több tanúsítványt és kulcsot igényel a hitelesítéshez. Most, hogy ezeket kiállítottuk és aláírtuk, elhelyezhetjük őket a megfelelő könyvtárakban. A gyökérkönyvtárban elhelyezendő tanúsítványok és kulcsok bontása a következő:

OpenVPN server

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

Az OpenVPN-kiszolgálón most létrehozhatja a server.conf konfigurációs fájlt a kedvenc szövegszerkesztőjével. A fájlt az Ön igényei szerint konfigurálhatja, mi pedig gondoskodunk arról, hogy a szervertanúsítvány és a kulcs részeket az Ön által az aláírt fájloknak választott neveknek megfelelően változtassuk meg:

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

Itt van a konfigurációs fájl, amelyet az utasítások teszteléséhez használhatunk:

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

Ha tesztelni szeretnénk, hogy a konfiguráció megfelelően működik-e, használhatjuk ezt a parancsot:

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

7. Indítsa el az OpenVPN szolgáltatást a kiszolgálón#

Engedélyezze az OpenVPN szolgáltatást a systemctl-hez való hozzáadásával, és indítsa el a következő parancsokkal:

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

Az OpenVPN-szolgáltatás aktiválásának kétszeres ellenőrzéséhez használja ezt a parancsot:

$ sudo systemctl status openvpn@server

Az OpenVPN-nek ezen a ponton már futnia kell.


Ügyféloldali konfiguráció#

1. Telepítse az OpenVPN-t és az Easy-RSA-t#

  1. Telepítse a szoftvert

    Közvetlenül dnf install segítségével telepíthetjük az OpenVPN 2.4.9 és az Easy-RSA 3.0.7 verziókat.

    $ sudo dnf install openvpn easy-rsa
    
  2. Ezután létrehozunk egy nem-root könyvtárat az Easy RSA számára Easy-RSA néven.

    $ mkdir ~/easyrsa
    
  3. És kapcsolja össze az Easy RSA csomaggal, amit most telepítettünk.

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

2. PKI létrehozása az OpenVPN-ügyfél számára#

Ugyanúgy, ahogyan létrehoztunk egy PKI-t az OpenVPN-kiszolgálón, létrehozunk egy PKI-t az Easy-RSA használatával az ügyféloldalon.

3. Hozzon létre egy client.req és client.key.#

Ugyanúgy, ahogyan a kulcspárt kiállítottuk a sever-en, generálunk egy kulcspárt az ügyfél számára, amely a client.req fájlból és a client.key fájlból áll. Ez utóbbit az ügyfélgépen titokban kell tartani.

4. Írja alá a client.req és adja ki a client.crt fájlt.#

A client.req fájlnak a CA gépre történő átviteléhez ugyanazt a módszert fogjuk használni, mint a server.req fájl esetében.

Az átvitelt követően a hitelesítésszolgáltató gépén aláírjuk a tanúsítvány aláírási kérelem fájlt ezzel a paranccsal

$ 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. Importálja client.crt a Nitrokey-t a CA-gépről.#

A client.crt fájl létrehozása után csatlakoztassuk a Nitrokey Pro 2 eszközt a CA géphez, és importáljuk a .crt fájlt a Pro 2 eszközre ezzel a paranccsal:

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

Ezzel a paranccsal ellenőrizheti, hogy a kulcs valóban a Nitrokey-n van-e tárolva:

$ pkcs15-tool -c

Vagy alternatívaként

$ pkcs11-tool --list-objects

További parancsokat a OpenSC wiki oldalon találsz.

6. Szerezze be a chain.crt fájlt a hitelesítésszolgáltató gépéről.#

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. Az ügyfél konfigurálása a Nitrokeyvel való interakcióhoz#

Most az ügyfélgépen csatlakoztassuk a Nitrokey Pro-t, és használjuk a VPN-kapcsolat létrehozásához a kiszolgálóval. Általánosságban elmondható, hogy a TLS-t használó kapcsolat több tanúsítványt és kulcsot igényel a hitelesítéshez:

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

Ehhez az útmutatóhoz a következő client.conf<x> fájlt használhatjuk, és ennek megfelelően hozzáadhatjuk a szükséges opciókat:

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. A helyes tárgy meghatározása

    Minden PKCS#11 szolgáltató több eszközt is támogathat. Az elérhető objektumok listájának megtekintéséhez a következő parancsot használhatja:

    $ 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
    

    Minden tanúsítvány/magánkulcs pár egyedi Serialized id karakterlánccal rendelkezik. A konfigurációs fájlban meg kell adni a kért tanúsítvány szerializált id karakterláncát. Ezt a pkcs11-id opció szimpla idézőjelek használatával tehetjük meg.

    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    
  2. A kinyert szerializált azonosító hozzáadása a konfigurációs fájlhoz

    A kedvenc szövegszerkesztőjével nyissa meg a server.conf fájlt, és illessze be a következő sorokat, miközben ügyeljen arra, hogy a saját Serialized id sorait is beillessze:

    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'
    

    Az OpenVPN Hitelesítéshez kapcsolódó további `beállításokhoz hitelesítéshez hozzáadhat néhány sort a kulcskezelés kezeléséhez, bár ez opcionális.

    Megjegyzés

    Kattintson a kód megtekintéséhez

    # 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
    

    Választható lépés

    Ha a konfigurációt a Nitrokey-n lévő tokennel és anélkül is tesztelni kell, akkor a client.conf sorokat adhat hozzá ugyanahhoz a ``-hoz, és az igényeinek megfelelően kommentálhatja/nem kommentálhatja a megfelelő sorokat:

    Megjegyzés

    Kattintson a kód megtekintéséhez

    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  3. Az OpenVPN kliens konfigurálása

    A végleges konfigurációs fájl client.conf így nézzen ki:

    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)

    A kézfogás létrehozásához konfigurálnia kell az OpenVPN-ben található OpenSSL-t.

    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

    Ezzel a módosítással nem lesz hiba, ahogyan azt a itt, itt és itt jelentette.

  5. Ismert problémák

    Van néhány ismert probléma az OpenVPN bejelentkezéssel kapcsolatban az OpenSC-vel. Kérjük, tekintse meg ezeket a problémákat itt.

8. Indítsa el az OpenVPN klienst#

  1. Indítsa el az OpenVPN szolgáltatást az ügyfeleken

    Engedélyezze az OpenVPN szolgáltatást, és indítsa el a következő parancsokkal:

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

    Az OpenVPN szolgáltatás aktiválásának ellenőrzéséhez használja ezt a parancsot:

    $ sudo systemctl status openvpn-server@server.service
    
  2. Adja meg a felhasználói PIN-kódot

    Az OpenVPN kliens futtatásakor a Nitrokey PIN-kódját kell megadni:

    $ 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: ******
    

    Figyelem

    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)
    

    Egyes bejelentett esetekben a terminál nem kéri a PIN-kód megadását. Az egyik megoldás az lenne, ha ezt a parancsot használná a PIN-kóddal történő bejelentkezéshez:

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

    Alternatív megoldásként újrafordíthatja az OpenVPN klienst a systemd támogatás kikapcsolásával, és a várakozásoknak megfelelően kérni fogja a PIN-kódot.

    Egy másik lehetőség az OpenVPN-példányba való bejelentkezés a Viscosity klienssel, amely jobb felhasználói élményt nyújt, különösen a PIN-kód megadásához.