OpenVPN konfiguráció az Easy-RSA-val#
(Nitrokey Pro 2 - Windows)
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:
Hitelesítési kulcs a Nitrokey Pro 2 (pdf) segítségével.
A Nitrokey HSM 2 (pdf) <https://www.nitrokey.com/files/doc/Nitrokey_HSM_factsheet.pdf>`_Nitrokey HSM 2 (pdf) használatával működő tanúsítványkiadó (CA)
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#
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
Vegye ki a megjegyzést, vagy ennek megfelelően szerkessze a következő sort
net.ipv4.ip_forward=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:
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 -
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.
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:
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
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.
Hozzon létre egy
vars
fájlt.
$ touch ~/easyrsa/vars
$ cd easyrsa/
$ editor vars
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.
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:
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.
A szervertanúsítványnak a következőkkel kell rendelkeznie:
keyUsage: digitalSignature, keyEncipherment<x>
extendedKeyUsage: serverAuth
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.
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.
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
openvpn/
könyvtár létrehozása acertificate-authority/
alatt.
$ mkdir/opt/certificate-authority/
$ cd /opt/certificate-authority/
Í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.#
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
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#
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
Ezután létrehozunk egy nem-root könyvtárat az Easy RSA számára
Easy-RSA
néven.
$ mkdir ~/easyrsa
É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.crt
stored 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
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'
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
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
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#
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
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.