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

(Nitrokey Pro 2 - Linux)

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.

A tanúsítványok aláírásához egy Nitrokey HSM 2-t fogunk használni, amelyet Tanúsítványkezelő-ként állítunk be, ez az útmutató azonban nem foglalkozik magának a hitelesítésszolgáltatónak a beállításával (ez itt egyértelmű és `jól dokumentált).

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 szoftveres megoldásokra támaszkodik a kulcskezeléshez.


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
  1. Vegye ki a megjegyzést, vagy ennek megfelelően szerkessze a következő sort

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

  1. 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 -
  1. 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 az OpenVPN ` 2.4.8 <https://community.openvpn.net/openvpn/ticket/1215>`_ verzióját igényli a bejelentkezéshez.

  1. 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
  1. 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
  1. 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, de ezeket a saját igényeidnek megfelelően testre szabhatod.

  1. 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. A kiszolgálónak és minden ügyfélnek saját tanúsítvány- és kulcsfájllal kell rendelkeznie. A kiszolgáló és az összes ügyfél ugyanazt a hitelesítésszolgáltatói fájlt használja.

  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.

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

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

**(Required step)** If this is the first time you sign a certificate with the CA, you might want to retrieve the URI of the CA’s private key from the HSM, and include it in the config file.
  • 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
  1. openvpn/ könyvtár létrehozása a certificate-authority/ alatt.

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

5.2. A server.crt fájl lekéré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
  1. 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. Install OpenVPN and Easy-RSA
2. Create a Public Key Infrastructure (PKI) for the OpenVPN client
3. Create the client's certificate signing request and the client's key
4. Sign and issue the client's certificate
5. Import the client certificate on the Nitrokey from the CA machine
6. Retrieve the chain certificate from the CA machine
7. Configure the client to interact with the Nitrokey
8. Start the OpenVPN client

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
  1. Ezután létrehozunk egy nem-root könyvtárat az Easy RSA számára Easy-RSA néven.

$ mkdir ~/easyrsa
  1. É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'
  1. 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éssel kapcsolatos további `beállításokhoz 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
  1. 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
  1. 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
  1. 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 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.