OpenVPNi konfigureerimine Easy-RSAga#

(Nitrokey Pro 2 - Linux)

Märkus

See juhend on pooleli ja seda ajakohastatakse vastavalt. Palun võtke seda staatust arvesse.

See juhend näitab, kuidas konfigureerida OpenVPN-kliente sisselogimiseks, kasutades Nitrokey Pro 2 või Nitrokey Storage 2. Tarkvaralise võtmehalduse jaoks kasutame Easy-RSA, utiliiti, mis on arenenud koos OpenVPNiga.

Sertifikaatide allkirjastamiseks kasutame Nitrokey HSM 2, mis on loodud Sertifitseerimisasutusena, aga see juhend ei käsitle CA enda seadistamist (see on selge ja hästi dokumenteeritud siin).

Me kasutame Easy-RSA-d, sest see näib pakkuvat teatavat paindlikkust ja võimaldab võtmehaldust väliste PKIde kaudu. Me kasutame seda serveris allkirjastamistaotluse esitamiseks ja kordame sama protsessi kliendil. Sertifikaadi allkirjastamistaotlused allkirjastab CA Nitorkey HSMis ja edastab need uuesti serverile ja kliendile.

Eeltingimused#

Järgnevas dokumentatsioonis vajame 3 erinevat masinat, mis on järgmised:

  • OpenVPN server (v. 2.5) Debian 10 peal (EC2 virtuaalne masin - AWS)

  • OpenVPN klient (v. 2.4.9) Fedora 30 (kohalik masin)

  • Sertifitseerimisasutusele pääseb ligi Fedora 30-ga varustatud eraldiseisvast masinast (kohalik masin).

Seadmetega suhtlemiseks vajame OpenSC 0.20, mis on paigaldatud kliendile ja CA masinale (kohalikele masinatele). Selle seadistamise juhiseid saate järgida tema lingil (*Unix).

Sõltuvuste allalaadimiseks Fedora masinatele saame selle juhendi:

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

Debian Linuxi jaoks on uuemad OpenSC paketid saadaval ` siin <https://github.com/Nitrokey/opensc-build>`_.

Me kasutame füüsilise võtme haldamiseks järgmisi Nitrokeys’e:

Meeldetuletuseks, et Nitrokey HSM 2 sertifikaadibüroo loomiseks võite järgida dokumentatsioonis ` olevaid juhiseid <certificate-authority.html#sign-a-server-certificate>`_.

Alternatiivina võite luua oma CA eraldi masinas ` või kasutada OpenVPNi õpetust, mis tugineb samuti Easy-RSA. Viimased 2 varianti tuginevad võtmehalduse tarkvaralahendustele.


Serveri poolel#

1. Paigaldage OpenVPN#

  1. Esmalt tuleb lubada IP Forwarding, muutes /etc/sysctl.conf faili.

$ editor /etc/sysctl.conf
  1. Tühjendage või redigeerige vastavalt järgmine rida

net.ipv4.ip_forward=1
  1. Pärast salvestamist sulgege see ja sisestage järgmine käsk

$ sysctl -p

Kui IP-i suunamine on tehtud, peame vastavalt `toodud juhistele <https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos><x>`_ alla laadima OpenvPN-i uusima versiooni meie Debian 10 serverile:

  1. Vahetage administraatoriks ja laadige alla GPG võti, mis on paketi allkirjastanud.

$ sudo -s
# wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
  1. Lisage sobivate OpenVPN pakettide URL aadressid faili sources.list.

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

Me laadisime alla OpenVPN 2.5, kuna „password prompt“ nõuab sisselogimiseks vähemalt OpenVPN versiooni 2.4.8.

  1. Järgmisena laadime alla OpenVPN

$ sudo apt install openvpn

Kui soovite kontrollida versiooni, on võimalik, kui kutsute --version ja trükkida järgmine:

$ 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. Paigaldage Easy-RSA#

PKI loomiseks laadime Easy-RSA uusima versiooni alla serverisse ja kliendimasinatesse. Viimase versiooni saamiseks minge ametliku EasyRSA GitHub projekti Releases lehele, kopeerige faili allalaadimislink, mis lõpeb .tgz, ja kleepige see järgnevasse käsku:

  1. Lae alla uusim versioon

$ cd ~
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
  1. Väljavõtta tarball

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

3. Luua PKI OpenVPN-serveri jaoks#

Enne OpenVPN-serveri privaatvõtme ja sertifikaadi loomist peate looma OpenVPN-serverisse kohaliku avaliku võtme infrastruktuuri kataloogi. Seda kataloogi kasutate serveri ja klientide sertifikaaditaotluste haldamiseks, selle asemel, et teha neid otse CA-serveris.

PKI kataloogi loomiseks OpenVPN serveris peate täitma faili nimega vars mõningate vaikeväärtustega.

  1. Loo vars<x> faili.

$ touch ~/easyrsa/vars
$ cd easyrsa/
$ editor vars
  1. Kui fail on avatud, kleepige järgmised kaks rida sisse

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Need on ainsad kaks rida, mida vajate selles vars failis oma OpenVPN serveris, kuna seda ei kasutata sertifikaadiasutusena. Nad tagavad, et teie privaatvõtmed ja sertifikaaditaotlused on konfigureeritud kasutama Elliptic Curve Cryptography (ECC) võtmete ja turvaliste allkirjade loomiseks teie klientide ja OpenVPN-serveri jaoks.

Mis puutub krüptograafiliste algoritmide valikusse, siis ma järgin selles õpetuses toodud mudelit, ja te võite neid kohandada vastavalt oma konkreetsetele vajadustele.

  1. PKI initsialiseerimine

Kui olete täitnud vars faili, võite jätkata PKI kataloogi loomisega. Selleks käivitage skript easyrsa koos init-pki valikuga:

$ ./easyrsa init-pki

Kui olete OpenVPN-serveri PKI initsialiseerinud, olete valmis liikuma järgmise sammu juurde, milleks on OpenVPN-serveri sertifikaaditaotluse ja privaatvõtme loomine.

4. Loo server.req ja server.key.#

Nüüd, kui teie OpenVPN serverile on paigaldatud kõik eeldused, on järgmine samm luua võtmepaar, mis koosneb privaatvõtmest (mida tuleb hoida salajas) ja sertifikaadi allkirjastamise taotlusest (.csr) teie OpenVPN serverile.

Üldiselt on süsteemides, kus me genereerime võtme ja taotluse, need failid jäetakse krüpteerimata, kasutades argumenti nopass, kuna serverid peavad tavaliselt käivituma ilma salasõna sisestamata. See genereerib krüptimata võtme, seega pidage silmas kaitske selle juurdepääsu ja failiõigusi hoolikalt.

Nõuanne

OpenVPNi konfiguratsioonimärkused:

  1. Serveril ja igal kliendil peab olema oma sertifikaat ja võtmefail. Server ja kõik kliendid kasutavad sama CA-faili.

  2. Serveri sertifikaat peaks olema järgmine:

  • keyUsage:  digitalSignature, keyEncipherment<x>

  • extendedKeyUsage: serverAuth<x>

  1. Luua serverile allkirjastamistaotlus

Navigeerige oma OpenVPN-serveri kataloogi ~/easyrsa oma mitte-root-kasutajana ja sisestage järgmised käsud:

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

Sellega luuakse serveri jaoks privaatne võti ja sertifikaaditaotluse fail nimega server.req.

Kui teil on allkirjastatud sertifikaat, siis edastate selle tagasi OpenVPN-serverisse.

  1. Kopeerige võti OpenVPN serveri kataloogi

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

Pärast nende sammude lõpuleviimist olete edukalt loonud OpenVPN-serveri privaatvõtme. Samuti olete loonud OpenVPN-serveri jaoks sertifikaadi allkirjastamise taotluse.

Nõuanne

Sertifikaadi allkirjastamise taotluste faililaiendid

CA ja HSMi juhendmaterjalis kasutatav faililaiend viitab .csr faili loomisele, kuid Easy-RSA loob sertifikaadi allkirjastamise taotlused laiendiga .req.

Kasutame mõlemat laiendust vaheldumisi, tagades samas, et edastame sertifikaadiasutusele õiged failid, ja genereerime lõpliku sertifikaadi laiendiga .crt.

Käesoleva juhendi järgmises osas allkirjastame .req faili meie CA-ga, mis on paigaldatud HSM 2 seadmesse. Selleks kasutan taotluste allkirjastamiseks spetsiaalset masinat.

5. Allkiri ja tagasivõtmine server.crt#

Järgnevad juhised nõuavad server.req (või server.csr) faili ülekandmist CA-süsteemi.

Ülekanne ise ei ole turvatundlik, kuigi on mõistlik kontrollida, kas vastuvõetud fail vastab saatja koopiale, kui transport ei ole usaldusväärne.

Nende sammude läbimiseks tuginen ma ulatuslikult toodud juhistele, et allkirjastada sertifikaadi allkirjastamise taotlusi, kui me need Easy-RSA-ga genereerisime.

5.1. Allkiri server.req<x> failis#

Lokaalses masinas, mis on ette nähtud HSMile juurdepääsuks, kasutame Opensc 0.20 poolt pakutavaid vahendeid, et allkirjastada .req fail ja saata see tagasi OpenVPN-serverisse. Eeldame, et oleme faili edastanud serveri masinast CA masinasse.

Kõigepealt alustame HSM Nitrokey ühendamisest ja sisestame selle juhise, et loetleda olemasolevad võtmed.

  1. Kättesaadavate seadmete loendi päring

  $ 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.
  • Võtme URI peaks olema sellisel kujul:

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. Loo openvpn/ kataloogi certificate-authority/ alla.

$ mkdir/opt/certificate-authority/
$ cd /opt/certificate-authority/
  1. Allkiri 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. Hangi server.crt faili serverisse.#

  1. Viige allkirjastatud sertifikaadid serverisse

Kopeerige CA masinast OpenVPN-serverisse failid server.crt ja chain.crt. Selles näites kasutame käsku scp<x> järgmiselt:

$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
  1. Asetage sertifikaadid serveri kataloogi

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

Hoiatus

CA sertifikaat ja chain.crt

Ülaltoodud juhul tagastab CA allkirjastatud sever-sertifikaadi ja sisaldab CA sertifikaati CA.crt, mis on chain.crt fail. Seda võib teha üle ebaturvalise kanali, kuigi kliendil soovitatakse kinnitada, kas saadud chain.crt on kehtiv, kui transport on ebaturvaline.

Faili chain.crt on võimalik sihtmasinal ümber nimetada failiks CA.crt, aga me kasutame järgmistes juhistes chain.crt.

6. Konfigureerige OpenVPN server#

TLS-i kasutav ühendus nõuab autentimiseks mitu sertifikaati ja võtit. Nüüd, kui me need välja andsime ja allkirjastasime, võime need õigetesse kataloogidesse paigutada. Sertifikaatide ja võtmete jaotus, mis peavad asuma juurkataloogis, on järgmine:

OpenVPN server

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

Nüüd saate oma OpenVPN-serveris luua oma lemmiktekstiredaktoriga konfiguratsioonifaili server.conf. Faili saab konfigureerida vastavalt teie vajadustele, kusjuures me muudame kindlasti serveri sertifikaadi ja võtme sektsioonid vastavalt teie poolt valitud nimedele teie allkirjastatud failidele:

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

Siin on konfiguratsioonifail, mida saame kasutada nende juhiste testimiseks:

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

Selleks, et testida, kas konfiguratsioon toimib korralikult, võime kasutada seda käsku:

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

7. Käivitage OpenVPN teenus serveris#

Lubage OpenVPN teenus, lisades selle systemctl-i ja käivitage see nende käskude abil:

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

OpenVPN-teenuse aktiivsuse kahekordseks kontrollimiseks kasutage seda käsku:

$ sudo systemctl status openvpn@server

OpenVPN peaks sel hetkel töötama.


Kliendipoolne konfiguratsioon#

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. Paigaldage OpenVPN ja Easy-RSA#

  1. Paigaldage tarkvara

Me võime kasutada otse dnf install OpenVPN 2.4.9 ja Easy-RSA 3.0.7 installimiseks.

$ sudo dnf install openvpn easy-rsa
  1. Seejärel loome mitte-root’ina kataloogi Easy RSA jaoks nimega Easy-RSA

$ mkdir ~/easyrsa
  1. Ja linkige see Easy RSA paketiga, mille me just paigaldasime.

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

2. Luua PKI OpenVPN-kliendi jaoks#

Samamoodi, nagu me lõime PKI OpenVPNi serveris, loome PKI, kasutades Easy-RSA-d kliendi poolel.

3. Loo client.req ja client.key.#

Samamoodi, nagu me väljastasime võtmepaari Severile, genereerime kliendile võtmepaari, mis koosneb client.req failist ja client.key failist. Viimast tuleb hoida kliendi masinas salajas.

4. Kirjutage client.req ja väljastage client.crt fail.#

Faili client.req üleandmiseks CA masinale kasutame sama meetodit, mida kasutasime faili server.req puhul.

Kui see on üle kantud, allkirjastame sertifikaadi allkirjastamise taotluse faili CA masinas selle käsuga

$ 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. Impordi client.crt Nitrokey masinale CA masinast.#

Pärast client.crt faili loomist ühendame Nitrokey Pro 2 seadme CA masinaga ja impordime .crt Pro 2 seadmesse selle käsuga:

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

Selle käsu abil saate näha, kas võti on Nitrokey’s tõhusalt salvestatud:

$ pkcs15-tool -c

Või alternatiivselt

$ pkcs11-tool --list-objects

Rohkem käsklusi leiate OpenSC wiki.

6. Hangi chain.crt fail CA masinast.#

Samas hoiame client.crtstored on the nitrokey Pro 2 device, we must retrieve the chain.crt faili kliendi masinas ja salvestame selle vastavasse kataloogi. Võime kasutada scp nagu käesoleva juhendi serverite osas selgitatud meetodil.

7. Konfigureerige klient Nitrokey’ga suhtlemiseks.#

Nüüd tagasi kliendi masinas ühendame Nitrokey Pro ja kasutame seda VPN-ühenduse loomiseks serveriga. Üldiselt nõuab TLS-i kasutav ühendus autentimiseks mitut sertifikaati ja võtit:

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

Selle juhendi jaoks võime kasutada järgmist client.conf<x> faili ja lisada sinna vastavalt vajalikud valikud:

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. Määrake õige objekt

Iga PKCS#11 teenusepakkuja võib toetada mitut seadet. Kättesaadavate objektide nimekirja vaatamiseks saate kasutada järgmist käsku:

$ 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

Igal sertifikaadi/privaatvõtme paaril on unikaalne Serialized id string. Konfiguratsioonifailis tuleb määrata taotletava sertifikaadi id-stringi jada. Seda saame teha, lisades pkcs11-id valiku, kasutades ühekordseid jutumärke.

pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
  1. Lisada saadud serialiseeritud ID konfiguratsioonifaili

Kasutades oma lemmiktekstiredaktorit, avage fail server.conf ja lisage järgmised read, hoolitsedes samas selle eest, et sisestada oma 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'

OpenVPNiga seotud täiendavate seadete jaoks autentimine, võite lisada ka paar rida võtmehalduse käsitlemiseks, kuigi see on vabatahtlik.

Märkus

Koodide vaatamiseks klõpsake

# 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

Vabatahtlik samm

Kui teil on vaja testida konfiguratsiooni koos ja ilma Nitrokey märgiga, võite lisada ridu samasse client.conf ja kommenteerida/mittekommenteerida asjaomaseid ridu vastavalt oma vajadustele:

Märkus

Koodide vaatamiseks klõpsake

# non_nitrokey login

# cert client.crt
# key client.key
# tls-auth ta.key 1
  1. OpenVPN-kliendi konfigureerimine

Lõplik konfiguratsioonifail client.conf peaks välja nägema selline:

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. Teadaolevad probleemid

OpenVPN-i sisselogimisega on teadaolevalt seotud mõned probleemid OpenSC-ga. Palun tutvuge nende probleemidega ` siin <https://github.com/Nitrokey/wiki/wiki/3rd-Party-Issues>`_.

8. Käivitage OpenVPN-klient#

  1. Käivitage OpenVPN teenus kliendil

Lubage OpenVPN teenus ja käivitage see nende käskude abil:

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

OpenVPN-teenuse aktiivsuse kontrollimiseks kasutage seda käsku:

$ sudo systemctl status openvpn-server@server.service
  1. Sisestage oma kasutaja PIN-kood

OpenVPN-kliendi käivitamisel tuleb sisestada Nitrokey PIN-kood:

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

Hoiatus

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)

Mõnel teatatud juhul ei küsi terminalis PIN-koodi. Üks lahendus oleks kasutada seda käsku PIN-koodiga sisselogimiseks:

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

Alternatiivina võite rekompileerida OpenVPN kliendi, mille systemd-tugi on välja lülitatud, ja see küsib PIN-koodi ootuspäraselt.

Teine võimalus on logida OpenVPNi instantsi sisse Viscosity kliendiga, mis pakub paremat kasutajakogemust, eriti PIN-koodi sisestamisel.