„OpenVPN“ konfigūracija su „Easy-RSA#

(Nitrokey Pro 2 - Windows)

Pastaba

Šis vadovas yra nebaigtas rengti ir bus atnaujinamas. Prašome atsižvelgti į šį statusą.

Šiame vadove parodyta, kaip sukonfigūruoti „OpenVPN“ klientus prisijungti naudojant „Nitrokey Pro 2“ arba „Nitrokey Storage 2“. Programiniam raktų valdymui naudosime Easy-RSA, priemonę, kuri buvo tobulinama kartu su OpenVPN.

Sertifikatams pasirašyti naudosime „Nitrokey HSM 2“, nustatytą kaip Sertifikatų tarnyba, tačiau šiame vadove neaptariamas pačios CA nustatymas (jis yra aiškus ir gerai dokumentuotas čia).

Naudosime „Easy-RSA“, nes atrodo, kad ji užtikrina tam tikrą lankstumą ir leidžia valdyti raktus per išorinius PKI. Ją naudosime serveryje pasirašymo užklausai pateikti ir tą patį procesą pakartosime klientui. Sertifikatų pasirašymo prašymus pasirašys „Nitorkey HSM“ CA ir pakartotinai perduos juos serveriui ir klientui.

Būtinosios sąlygos#

Toliau pateiktoje dokumentacijoje mums reikės 3 skirtingų mašinų:

  • „OpenVPN“ serveris (2.5 versija) „Debian 10“ sistemoje (EC2 virtuali mašina - AWS)

  • „OpenVPN“ klientas (v. 2.4.9) „Fedora 30“ (vietiniame kompiuteryje)

  • Sertifikatų tarnyba bus pasiekiama iš atskiro kompiuterio su „Fedora 30“ (vietinis kompiuteris).

Kad galėtume sąveikauti su įrenginiais, reikės OpenSC 0.20 įdiegti kliento ir CA kompiuteryje (vietiniuose kompiuteriuose). Galite vadovautis instrukcijomis, kaip ją nustatyti šioje nuorodoje (*Unix).

Norėdami atsisiųsti priklausomybes „Fedora“ kompiuteriuose, galime pasinaudoti šia instrukcija:

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

„Debian Linux“ atveju naujesnius „OpenSC“ paketus galima rasti čia.

Fiziniam raktų valdymui naudosime šiuos Nitrokeys:

Primename, kad norėdami sukurti „Nitrokey HSM 2“ sertifikatų tarnybą, galite vadovautis instrukcijomis, pateiktomis ` dokumentuose <certificate-authority.html#sign-a-server-certificate>`_.

Taip pat galite nustatyti savo CA atskirame kompiuteryje arba naudoti „OpenVPN“ vadovėlį, kuris taip pat remiasi Easy-RSA. Pastarieji 2 variantai remiasi raktų valdymo programinės įrangos sprendimais.


Serverio pusėje#

1. Įdiekite OpenVPN#

  1. Pirmiausia reikia įjungti IP persiuntimą redaguojant /etc/sysctl.conf failą.

$ editor /etc/sysctl.conf
  1. Panaikinkite arba atitinkamai redaguokite šią eilutę

net.ipv4.ip_forward=1
  1. Išsaugoję jį uždarykite ir įveskite šią komandą

$ sysctl -p

Atlikę IP peradresavimą, turėsime atsisiųsti naujausią „OpenvPN“ versiją savo „Debian 10“ serveriui, kaip nurodyta šiose instrukcijose:

  1. Pasikeiskite į root ir atsisiųskite paketą pasirašiusį GPG raktą

$ sudo -s
# wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
  1. Į failą sources.list įtraukite tinkamų „OpenVPN“ paketų URL.

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

Atsisiuntėme „OpenVPN 2.5“, nes „slaptažodžio paraginimas“ reikalauja bent „OpenVPN“ versijos 2.4.8, kad galėtumėte prisijungti.

  1. Toliau atsisiunčiame „OpenVPN

$ sudo apt install openvpn

Jei norite patikrinti versiją, tai galima padaryti paskambinus --version ir išspausdinus toliau pateiktą informaciją:

$ 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. Įdiekite „Easy-RSA#

Norėdami sukurti PKI, į serverio ir kliento kompiuterius atsisiųsime naujausią „Easy-RSA“ versiją. Norėdami gauti naujausią versiją, eikite į Releases puslapį oficialiame „EasyRSA GitHub“ projekte, nukopijuokite failo, pasibaigiančio .tgz, atsisiuntimo nuorodą ir įklijuokite ją į šią komandą:

  1. Atsisiųskite naujausią versiją

$ cd ~
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
  1. Ištraukti tarball

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

3. Sukurti PKI OpenVPN serveriui#

Prieš kurdami OpenVPN serverio privatųjį raktą ir sertifikatą, savo OpenVPN serveryje turite sukurti vietinį viešojo rakto infrastruktūros katalogą. Šį katalogą naudosite serverio ir klientų sertifikatų užklausoms tvarkyti, užuot jas teikę tiesiogiai CA serveryje.

Norėdami „OpenVPN“ serveryje sukurti PKI katalogą, turėsite užpildyti failą, pavadintą vars, kai kuriomis numatytosiomis reikšmėmis.

  1. Sukurkite vars failą

$ touch ~/easyrsa/vars
$ cd easyrsa/
$ editor vars
  1. Atidarę failą įklijuokite šias dvi eilutes

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Tai vienintelės dvi eilutės, kurių reikia šiame vars faile OpenVPN serveryje, nes jis nebus naudojamas kaip sertifikato institucija. Jie užtikrins, kad jūsų privatieji raktai ir sertifikatų užklausos būtų sukonfigūruotos taip, kad raktams generuoti būtų naudojama elipsinės kreivės kriptografija (ECC), o jūsų klientams ir OpenVPN serveriui - saugūs parašai.

Dėl kriptografinių algoritmų pasirinkimo aš vadovaujuosi šioje vadovėlyje pateiktu modeliu, o jūs galite juos pritaikyti pagal savo konkrečius poreikius.

  1. PKI inicijavimas

Užpildę vars failą, galite tęsti PKI katalogo kūrimą. Norėdami tai padaryti, paleiskite easyrsa scenarijų su parinktimi init-pki:

$ ./easyrsa init-pki

Inicializavę PKI „OpenVPN“ serveryje, galite pereiti prie kito veiksmo - sukurti „OpenVPN“ serverio sertifikato užklausą ir privatųjį raktą.

4. Sukurkite server.req ir server.key.#

Dabar, kai „OpenVPN“ serveryje įdiegtos visos būtinosios sąlygos, kitas žingsnis - sugeneruoti raktų porą, sudarytą iš privataus rakto (kurį reikia laikyti paslaptyje) ir sertifikato pasirašymo prašymo (.csr) „OpenVPN“ serveryje.

Apskritai sistemose, kuriose generuojame raktą ir užklausą, šie failai paliekami neužšifruoti naudojant nopass argumentą, nes serverius paprastai reikia paleisti neįvedus slaptažodžio. Taip sukuriamas nešifruotas raktas, todėl nepamirškite atidžiai apsaugoti jo prieigos ir failų teisių.

Patarimas

„OpenVPN“ konfigūracijos pastabos:

  1. Serveris ir kiekvienas klientas turi turėti savo cert ir rakto failą. Serveris ir visi klientai naudos tą patį CA failą.

  2. Serverio sertifikatas turi turėti šiuos požymius:

  • keyUsage:  digitalSignature, keyEncipherment

  • extendedKeyUsage: serverAuth

  1. Sukurti serverio pasirašymo užklausą

Pereikite į ~/easyrsa katalogą savo OpenVPN serveryje kaip ne šakninis naudotojas ir įveskite šias komandas:

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

Taip bus sukurtas serverio privatusis raktas ir sertifikato prašymo failas, pavadintas server.req.

Kai turėsite pasirašytą sertifikatą, perduosite jį atgal į „OpenVPN“ serverį.

  1. Nukopijuokite raktą į OpenVPN serverio katalogą

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

Atlikę šiuos veiksmus sėkmingai sukūrėte „OpenVPN“ serverio privatų raktą. Taip pat sukūrėte „OpenVPN“ serverio sertifikato pasirašymo užklausą.

Patarimas

Sertifikatų pasirašymo užklausų failų plėtiniai

Failo plėtinys, kurį priima CA ir HSM vadovėlis, nurodo, kad reikia sukurti </x id="92"></x>.csr failą, tačiau „Easy-RSA“ sukuria sertifikatų pasirašymo prašymus su </x id="168"></x> plėtiniu.

Naudosime pakaitomis abu plėtinius, tačiau įsitikinsime, kad į sertifikatų tarnybą perduodame tinkamus failus, ir sukursime galutinį sertifikatą su .crt plėtiniu.

Kitame šio vadovo skyriuje pasirašysime .req failą su mūsų CA, įdiegta HSM 2 įrenginyje. Šiam tikslui pasirašyti užklausas naudosiu specialų kompiuterį.

5. Pasirašyti ir gauti server.crt#

Pagal toliau pateiktus nurodymus į CA sistemą reikia perkelti server.req (arba server.csr) failą.

Pats perkėlimas nėra saugus, tačiau, jei transportas nepatikimas, pravartu patikrinti, ar gautas failas atitinka siuntėjo kopiją.

Atlikdamas šiuos veiksmus, plačiai remsiuosi šiomis instrukcijomis, kad galėčiau pasirašyti sertifikatų pasirašymo prašymus, kai juos sugeneruosime naudodami „Easy-RSA“.

5.1. Pasirašykite server.req failą#

Vietiniame kompiuteryje, skirtame HSM pasiekti, naudosime Opensc 0.20 įrankius, kad pasirašytume .req failą ir nusiųstume jį atgal į OpenVPN serverį. Darome prielaidą, kad failą iš serverio kompiuterio persiuntėme į CA kompiuterį.

Pirmiausia pradedame nuo HSM „Nitrokey“ prijungimo ir įveskite šią instrukciją, kad išvardytumėte turimus klavišus.

  1. Užklausa apie turimų prietaisų sąrašą

  $ 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.
  • Raktas URI turėtų būti tokio formato:

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. Sukurti openvpn/ katalogą po certificate-authority/.

$ mkdir/opt/certificate-authority/
$ cd /opt/certificate-authority/
  1. Pasirašykite server.req

$ 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. server.crt failo gavimas į serverio kompiuterį#

  1. Pasirašytų sertifikatų perkėlimas į serverį

Iš CA kompiuterio nukopijuokite failus server.crt ir </x id="57"></x> į „OpenVPN“ serverį. Šiame pavyzdyje naudosime scp komandą, kaip nurodyta toliau:

$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
  1. Įdėkite sertifikatus į serverio katalogą

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

Įspėjimas

CA sertifikatas ir chain.crt

Pirmiau pateiktame pavyzdyje CA grąžina pasirašytą Šiaurės sertifikatą ir įtraukia CA sertifikatą CA.crt, kuris yra chain.crt failas. Tai galima atlikti nesaugiu kanalu, tačiau klientui rekomenduojama patvirtinti, ar gautas chain.crt galioja, jei transportas nepatikimas.

Failą chain.crt galima pervadinti į CA.crt tiksliniame kompiuteryje, tačiau kituose nurodymuose naudosime chain.crt.

6. Sukonfigūruokite OpenVPN serverį#

TLS naudojančiam ryšiui reikia kelių `autentifikavimo <https://wiki.teltonika-networks.com/view/OpenVPN_configuration_examples>`_sertifikatų ir raktų. Dabar, kai juos išdavėme ir pasirašėme, galime juos patalpinti į reikiamus katalogus. Sertifikatų ir raktų, kurie turi būti šakniniame kataloge, suskirstymas yra toks:

OpenVPN server

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

Dabar savo „OpenVPN“ serveryje galite sukurti konfigūracijos failą server.conf naudodami mėgstamą teksto redaktorių. Failą galite konfigūruoti pagal savo poreikius, o mes pasirūpinsime, kad serverio sertifikato ir rakto dalys būtų pakeistos pagal jūsų pasirinktus jūsų pasirašytų failų pavadinimus:

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

Čia pateikiamas konfigūracijos failas, kurį galime naudoti šioms instrukcijoms išbandyti:

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

Norėdami patikrinti, ar konfigūracija veikia tinkamai, galime naudoti šią komandą:

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

7. Įjunkite OpenVPN paslaugą serveryje#

Įjunkite „OpenVPN“ paslaugą, pridėdami ją į systemctl, ir paleiskite ją šiomis komandomis:

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

Norėdami patikrinti, ar OpenVPN paslauga yra aktyvi, naudokite šią komandą:

$ sudo systemctl status openvpn@server

Šiuo metu turėtų veikti „OpenVPN“.


Kliento pusės konfigūracija#

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. Įdiekite „OpenVPN“ ir „Easy-RSA#

  1. Įdiekite programinę įrangą

Galime tiesiogiai naudoti dnf install, kad įdiegtume OpenVPN 2.4.9 ir Easy-RSA 3.0.7

$ sudo dnf install openvpn easy-rsa
  1. Tada sukuriame ne šakninį katalogą, skirtą „Easy RSA“, pavadintą Easy-RSA.

$ mkdir ~/easyrsa
  1. Ir susiekite jį su ką tik įdiegtu „Easy RSA“ paketu

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

2. Sukurti PKI OpenVPN klientui#

Tokiu pat būdu, kokiu sukūrėme PKI „OpenVPN“ serveryje, sukursime PKI naudodami „Easy-RSA“ kliento pusėje.

3. Sukurkite client.req ir client.key.#

Tokiu pat būdu, kaip ir išdavėme raktų porą serveriui, sugeneruosime raktų porą klientui, kurią sudarys client.reqclient.req failas ir client.key failas. Pastarasis turi būti slaptas kliento kompiuteryje.

4. Pasirašykite client.req ir išduokite client.crt failą.#

Norėdami perkelti client.req failą į CA kompiuterį, naudosime tą patį metodą, kaip ir </x id="103"></x> failo atveju.

Perdavus sertifikatą, CA kompiuteryje pasirašome sertifikato pasirašymo prašymo failą naudodami šią komandą

$ 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. Importuokite client.crt į „Nitrokey“ iš CA mašinos.#

Sukūrę client.crt failą, prijungiame „Nitrokey Pro 2“ įrenginį prie CA kompiuterio ir importuojame .crt į „Pro 2“ įrenginį naudodami šią komandą:

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

Naudodami šią komandą galite patikrinti, ar raktas veiksmingai saugomas „Nitrokey“, naudodami šią komandą:

$ pkcs15-tool -c

Arba

$ pkcs11-tool --list-objects

Daugiau komandų galite rasti OpenSC wiki.

6. Atgaukite chain.crt failą iš CA kompiuterio.#

O client.crt`stored on the nitrokey Pro 2 device, we must retrieve the chain.crt failą laikome kliento kompiuteryje ir saugome atitinkamame kataloge. Galime naudoti scp, kaip ir šio vadovo serverio skyriuje paaiškintame metode.

7. Sukonfigūruokite klientą sąveikai su „Nitrokey#

Dabar vėl kliento kompiuteryje prijunkite „Nitrokey Pro“ ir naudokite jį VPN ryšiui su serveriu užmegzti. Apskritai TLS naudojančiam ryšiui reikia kelių sertifikatų ir raktų autentiškumui patvirtinti:

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

Šiame vadove galime naudoti šį client.conf failą ir į jį atitinkamai pridėti reikiamas parinktis:

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. Nustatykite tinkamą objektą

Kiekvienas PKCS#11 teikėjas gali palaikyti kelis įrenginius. Norėdami peržiūrėti galimų objektų sąrašą, galite naudoti šią komandą:

$ 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

Kiekviena sertifikato ir privataus rakto pora turi unikalią Serialized id eilutę. Konfigūracijos faile reikia nurodyti prašomo sertifikato serijinę id eilutę. Tai galime padaryti pridėdami pkcs11-id parinktį, naudodami viengubus kabliataškius.

pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
  1. Įtraukti gautą serijinį ID į konfigūracijos failą

Naudodamiesi mėgstamu teksto redaktoriumi atidarykite server.conf failą ir pridėkite toliau nurodytas eilutes, tačiau nepamirškite įterpti savo Serialized id:

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'

Norėdami atlikti papildomus `nustatymus, susijusius su OpenVPN <https://openvpn.net/community-resources/how-to/>`_autentifikavimu, taip pat galite pridėti keletą eilučių, skirtų raktų valdymui tvarkyti, nors tai neprivaloma.

Pastaba

Spustelėkite, jei norite peržiūrėti kodą

# 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

Neprivalomas žingsnis

Jei reikia išbandyti konfigūraciją su „Nitrokey“ ženklu ir be jo, galite pridėti eilučių į tą pačią client.conf ir komentuoti/nekomentuoti atitinkamas eilutes pagal savo poreikius:

Pastaba

Spustelėkite, jei norite peržiūrėti kodą

# non_nitrokey login

# cert client.crt
# key client.key
# tls-auth ta.key 1
  1. Sukonfigūruokite „OpenVPN“ klientą

Galutinis konfigūracijos failas client.conf turėtų atrodyti taip:

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. Žinomos problemos

Yra keletas žinomų problemų, susijusių su „OpenVPN“ prisijungimu prie „OpenSC“. Prašome susipažinti su šiomis problemomis čia.

8. Paleiskite OpenVPN klientą#

  1. Įjunkite „OpenVPN“ paslaugą kliento kompiuteryje

Įjunkite „OpenVPN“ paslaugą ir paleiskite ją šiomis komandomis:

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

Norėdami dar kartą patikrinti, ar „OpenVPN“ paslauga yra aktyvi, naudokite šią komandą:

$ sudo systemctl status openvpn-server@server.service
  1. Įveskite naudotojo PIN kodą

Vykdant „OpenVPN“ klientą reikia įvesti „Nitrokey“ PIN kodą:

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

Įspėjimas

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)

Kai kuriais atvejais terminale neprašoma įvesti PIN kodo. Viena iš apeičių būtų naudoti šią komandą prisijungimui su PIN kodu:

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

Arba galite perkompiluoti OpenVPN klientą su išjungtu „systemd“ palaikymu, ir jis, kaip ir tikėtasi, paprašys nurodyti PIN kodą.

Kitas variantas - prisijungti prie „OpenVPN“ instancijos naudojant „Viscosity“ klientą, kuris užtikrina geresnę naudotojo patirtį, ypač įvedant PIN kodą.