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 egyértelmű és jól dokumentált itt).
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)
A Nitrokey HSM 2 (pdf) tanúsítványkiadó (CA) használata
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#
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 OpenVPN verzió 2.4.8 verziót igényel 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, és 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. 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é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
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
Sajnos úgy tűnik, hogy az OpenVPN nem képes létrehozni egy kézfogást, és megáll egy hibaüzenetnél, ahogy azt itt, itt és itt.
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.