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

Míg a client.crtstored on the nitrokey Pro 2 device, we must retrieve the chain.crt fájlt az ügyfélgépen tartjuk, és a megfelelő könyvtárban tároljuk. Használhatjuk a scp, mint az útmutató szerver fejezetében ismertetett módszerben.

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.

    Hozzuk létre a ssl könyvtárat a C:\Program Files\OpenVPN könyvtárban és hozzuk létre a openssl.cnf fájlt a következő tartalommal :

    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.