OpenVPN-konfiguration med Easy-RSA#
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Bemærk
Denne vejledning er under udarbejdelse og vil blive opdateret løbende. Vær venlig at tage hensyn til denne status.
Denne vejledning viser, hvordan du konfigurerer OpenVPN-klienter til at logge ind med en Nitrokey Pro 2 eller en Nitrokey Storage 2. Til software-nøglehåndtering vil vi bruge Easy-RSA, et værktøj, der har udviklet sig sideløbende med OpenVPN.
To sign the certificates, we will use a Nitrokey HSM 2 set up as Certificate Authority, however this guide does not cover the set up of the CA itself (it is clear and well documented here).
Vi vil bruge Easy-RSA, fordi det ser ud til at give en vis fleksibilitet og giver mulighed for nøglehåndtering via eksterne PKI’er. Vi vil bruge den på serveren til at sende signeringsanmodningen og gentage den samme proces på klienten. Certificate Signing Requests vil blive signeret af CA’en på Nitorkey HSM’en og videresendt til serveren og klienten.
Forudsætninger#
I den følgende dokumentation har vi brug for 3 forskellige maskiner som følger:
OpenVPN-server (v. 2.5) på Debian 10 (virtuel EC2-maskine - AWS)
OpenVPN-klient (v. 2.4.9) på Fedora 30 (lokal maskine)
Certifikatmyndigheden vil være tilgængelig fra en standalone-maskine med Fedora 30 (lokal maskine)
For at kunne interagere med enhederne skal OpenSC 0.20 være installeret på klienten og CA-maskinen (de lokale maskiner). Du kan følge instruktionerne for at opsætte den i dette link (*Unix).
For at downloade afhængighederne på Fedora-maskiner kan vi bruge denne instruktion:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
For Debian Linux er nyere OpenSC-pakker tilgængelige ` her <https://github.com/Nitrokey/opensc-build>`_.
Vi vil bruge følgende Nitrokeys til fysisk nøglehåndtering:
En autentifikationsnøgle ved hjælp af Nitrokey Pro 2 (pdf)
En certifikatudstedende myndighed (CA), der bruger Nitrokey HSM 2 (pdf)
Til minde om, at du kan bygge en certifikatudstedende myndighed på Nitrokey HSM 2 ved at følge instruktionerne i dokumentationen ` i <certificate-authority.html#sign-a-server-certificate>`_.
Alternativt kan du oprette din egen CA på en på en separat maskine, eller du kan bruge OpenVPN-vejledningen, som også er baseret på Easy-RSA. De 2 sidste muligheder er afhængige af softwareløsninger til nøglehåndtering.
Server side#
1. Installer OpenVPN#
Først skal vi aktivere IP-forwarding ved at redigere filen
/etc/sysctl.conf
.$ editor /etc/sysctl.confFjern eller rediger følgende linje i overensstemmelse hermed
net.ipv4.ip_forward=1Luk efter at have gemt den, og indtast denne kommando
$ sysctl -pNår IP forwarding er udført, skal vi downloade den seneste udgave af OpenvPN til vores Debian 10-server, i henhold til denne vejledning:
Skift til root og hent den GPG-nøgle, der har signeret pakken
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -Tilføj URL’en for de relevante OpenVPN-pakker til filen
sources.list
# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitVi downloadede OpenVPN 2.5, da »password prompt« kræver mindst OpenVPN version 2.4.8 for at logge ind.
Dernæst downloader vi OpenVPN
$ sudo apt install openvpnHvis du ønsker at kontrollere versionen, er det muligt ved at kalde
--version
og udskrive følgende:$ 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. Installer Easy-RSA#
For at opbygge PKI’en downloader vi den nyeste version af Easy-RSA til server- og klientmaskinerne. For at hente den seneste version skal du gå til Releases-siden på det officielle EasyRSA GitHub-projekt, kopiere downloadlinket til filen, der slutter med
.tgz
, og derefter indsætte det i følgende kommando:
Download den seneste version
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzUdpak tarball’en
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Opret en PKI til OpenVPN-serveren#
Før du kan oprette din OpenVPN-serverens private nøgle og certifikat, skal du oprette en lokal mappe med en infrastruktur for offentlige nøgler på din OpenVPN-server. Du skal bruge denne mappe til at administrere serverens og klienternes certifikatanmodninger i stedet for at lave dem direkte på din CA-server.
Hvis du vil oprette en PKI-mappe på din OpenVPN-server, skal du udfylde en fil kaldet
vars
med nogle standardværdier.
Opret en
vars
-fil$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsNår filen er åbnet, skal du indsætte følgende to linjer
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Det er de eneste to linjer, du har brug for i denne
vars
-fil på din OpenVPN-server, da den ikke vil blive brugt som en certifikatudstedende myndighed. De vil sikre, at dine private nøgler og certifikatanmodninger er konfigureret til at bruge ECC (Elliptic Curve Cryptography) til at generere nøgler og sikre signaturer for dine klienter og OpenVPN-serveren.Med hensyn til valget af kryptografiske algoritmer følger jeg modellen i ` denne vejledning <https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-an-openvpn-server-on-centos-8>`_, og du kan tilpasse disse efter dine specifikke behov.
Initialisere PKI’en
Når du har udfyldt filen
vars
, kan du fortsætte med at oprette PKI-mappen. For at gøre dette skal du køre easyrsa-scriptet med indstillingen init-pki:$ ./easyrsa init-pkiNår du har initialiseret din PKI på OpenVPN-serveren, er du klar til at gå videre til næste trin, som er at oprette en OpenVPN-servercertifikatanmodning og en privat nøgle.
4. Opret server.req
og server.key
.#
Nu hvor din OpenVPN-server har alle forudsætningerne installeret, er det næste skridt at generere et nøglepar bestående af en privat nøgle (som skal holdes hemmelig) og en Certificate Signing Request (
.csr
) på din OpenVPN-server.På systemer, hvor vi genererer en nøgle og en anmodning, efterlades disse filer generelt ukrypteret ved at bruge
nopass
-argumentet, da servere normalt skal starte op uden indtastning af adgangskode. Dette genererer en u-krypteret nøgle, så husk at beskytte dens adgang og filtilladelser omhyggeligt.Tip
Konfigurationsnoter fra OpenVPN:
- The server, and each client, must have their own cert and key
file. The server and all clients will use the same CA file.
Servercertifikatet skal have følgende:
keyUsage: digitalSignature, keyEncipherment
extendedKeyUsage: serverAuth
Opret anmodningen om signering for serveren
Naviger til mappen
~/easyrsa
på din OpenVPN-server som din ikke-root-bruger, og indtast følgende kommandoer:$ cd easyrsa/ $ ./easyrsa gen-req server nopassDette vil oprette en privat nøgle til serveren og en certifikatanmodningsfil kaldet
server.req
.Når du har et underskrevet certifikat, skal du overføre det tilbage til OpenVPN-serveren.
Kopier nøglen til mappen med OpenVPN-serveren
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/Når du har gennemført disse trin, har du oprettet en privat nøgle til din OpenVPN-server. Du har også genereret en Certificate Signing Request for OpenVPN-serveren.
Tip
Filudvidelser for anmodninger om signering af certifikater
Den filudvidelse, der anvendes af CA- og HSM-tutorials, angiver, at der skal oprettes en
.csr<x>
-fil, men Easy-RSA opretter certifikatunderskrivningsanmodninger med en.req
-udvidelse.Vi vil bruge begge udvidelser i flæng, mens vi sikrer os, at vi overfører de rigtige filer til certifikatudstederen og genererer et endeligt certifikat med en udvidelse
.crt
.I det næste afsnit af denne vejledning underskriver vi en
.req
-fil med vores CA på HSM 2-enheden. Til dette formål vil jeg bruge en dedikeret maskine til at underskrive anmodningerne.
5. Underskriv og hent server.crt
#
De følgende instruktioner kræver overførsel af filen
server.req
(ellerserver.csr
) til CA-systemet.Selve overførslen er ikke sikkerhedsfølsom, selv om det er klogt at kontrollere, om den modtagne fil svarer til afsenderens kopi, hvis transporten ikke er fortrolig.
For at gennemgå disse trin vil jeg i vid udstrækning benytte denne vejledning til at underskrive certifikatunderskrivningsanmodningerne, når vi har genereret dem med Easy-RSA.
Underskriv filen
server.req
På den lokale maskine, der er dedikeret til at få adgang til HSM, vil vi bruge værktøjerne fra Opensc 0.20 til at signere
.req
-filen og sende den tilbage til OpenVPN-serveren. Vi antager, at vi har overført filen fra servermaskinen til CA-maskinen.Vi starter med at sætte HSM Nitrokey i stikket og indtaster denne instruktion for at få en liste over de tilgængelige nøgler.
Spørg på listen over tilgængelige enheder
$ p11tool --list-all(Påkrævet trin) Hvis det er første gang, du underskriver et certifikat med CA’en, kan det være en god idé at hente URI’en til CA’ens private nøgle fra HSM’en og inkludere den i konfigurationsfilen.
Bemærk
Nøglens URI skal være i dette format:
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=privateOpret
openvpn/
mappe undercertificate-authority/
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Underskriv
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.crt5.2. Hent filen
server.crt
til servermaskinen
Overfør de signerede certifikater til serveren
Kopier filerne
server.crt
ogchain.crt
fra CA-maskinen til OpenVPN-serveren. I dette eksempel vil vi bruge kommandoenscp
som følger:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpPlacer certifikaterne i serverens mappe
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverAdvarsel
CA-certifikat og
chain.crt
I ovenstående returnerer CA det signerede sever-certifikat og inkluderer CA-certifikatet
CA.crt
, som er filenchain.crt
. Dette kan ske over en usikker kanal, men klienten opfordres til at bekræfte, om den modtagnechain.crt
er gyldig, hvis transporten ikke er betroet.Det er muligt at omdøbe filen
chain.crt
tilCA.crt
på målmaskinen, men vi vil dog brugechain.crt
i de næste instruktioner.
6. Konfigurer OpenVPN-serveren#
En forbindelse, der bruger TLS, kræver flere certifikater og nøgler til autentificering. Nu hvor vi har udstedt og signeret dem, kan vi placere dem i de rigtige mapper. Fordelingen af de certifikater og nøgler, der skal ligge i rodmappen, er følgende:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)På din OpenVPN-server kan du nu oprette konfigurationsfilen
server.conf
med din foretrukne teksteditor. Filen kan konfigureres efter dine behov, mens vi sørger for at ændre servercertifikatet og nøgleafsnittene i overensstemmelse med de navne, du har valgt for de filer, vi har signeret:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keyHer er den konfigurationsfil, som vi kan bruge til at teste disse instruktioner:
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 versionFor at teste, om konfigurationen fungerer korrekt, kan vi bruge denne kommando:
$ sudo openvpn --server --config server.conf
7. Start OpenVPN-tjenesten på serveren#
Aktiver OpenVPN-tjenesten ved at tilføje den til systemctl, og start den ved hjælp af disse kommandoer:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverBrug denne kommando til at dobbelttjekke, om OpenVPN-tjenesten er aktiv:
$ sudo systemctl status openvpn@serverOpenVPN bør køre på dette tidspunkt.
Konfiguration på klientsiden#
1. Installer OpenVPN og Easy-RSA#
Installer softwaren
Vi kan bruge direkte
dnf install
til at installere OpenVPN 2.4.9 og Easy-RSA 3.0.7$ sudo dnf install openvpn easy-rsaDerefter opretter vi som ikke-rod en mappe til Easy RSA kaldet
Easy-RSA
$ mkdir ~/easyrsaOg knyt den til Easy RSA-pakken, som vi lige har installeret
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Opret en PKI til OpenVPN-klienten#
På samme måde som vi oprettede en PKI på OpenVPN-serveren, vil vi oprette en PKI ved hjælp af Easy-RSA på klientsiden.
3. Opret en client.req
og client.key
.#
På samme måde som vi udstedte nøgleparret på serveren, genererer vi et nøglepar til klienten, som vil bestå af filen
client.req
og filenclient.key
. Sidstnævnte skal holdes hemmelig på klientmaskinen.
4. Underskriv client.req
og udsted client.crt
-filen.#
For at overføre filen
client.req
til CA-maskinen bruger vi den samme metode, som vi gjorde for filenserver.req
.Når den er overført, underskriver vi certifikatunderskriftsanmodningsfilen på CA-maskinen med denne kommando
$ 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. Importer client.crt
på Nitrokey fra CA-maskinen#
Efter at have oprettet filen
client.crt
tilslutter vi Nitrokey Pro 2-enheden til CA-maskinen og importerer filen.crt
til Pro 2-enheden ved hjælp af denne kommando:$ pkcs15-init --store-certificate client.crt --id 3Du kan se, om nøglen faktisk er gemt på Nitrokey ved hjælp af denne kommando:
$ pkcs15-tool -cEller alternativt
$ pkcs11-tool --list-objectsFor flere kommandoer kan du se OpenSC-wiki.
6. Hent filen chain.crt
fra CA-maskinen#
Mens vi beholder
client.crt
stored on the nitrokey Pro 2 device, we must retrieve thechain.crt`<x>`-filen på klientmaskinen og gemmer den i den rette mappe. Vi kan bruge ``scp
som i den metode, der er forklaret i afsnittet om servere i denne vejledning.
7. Konfigurer klienten til at interagere med Nitrokey#
Tilbage på klientmaskinen vil vi nu tilslutte Nitrokey Pro og bruge den til at etablere VPN-forbindelsen med serveren. Generelt set kræver en forbindelse, der anvender TLS, flere certifikater og nøgler til autentificering:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keyI denne vejledning kan vi bruge følgende fil
client.conf
og tilføje de nødvendige indstillinger til den: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
Bestem det korrekte objekt
Hver PKCS#11-udbyder kan understøtte flere enheder. For at få vist den tilgængelige objektliste kan du bruge følgende kommando:
$ 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=%03Hvert certifikat/privatnøglepar har en unik
Serialized id
-streng. Den serialiserede id-streng for det ønskede certifikat skal angives i konfigurationsfilen. Det kan vi gøre ved at tilføje indstillingenpkcs11-id
ved hjælp af enkelte anførselstegn.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Tilføj det hentede serialiserede ID til konfigurationsfilen
Åbn filen server.conf med din foretrukne teksteditor, og tilføj følgende linjer, idet du sørger for at indsætte dine egne
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'For yderligere indstillinger relateret til OpenVPN-godkendelse, kan du også tilføje nogle få linjer til håndtering af nøglehåndtering, selvom det er valgfrit.
Bemærk
Klik for at se koden
# 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 PINValgfrit trin
Hvis du har brug for at teste konfigurationen med og uden token på Nitrokey, kan du tilføje linjer til den samme
client.conf
og kommentere/afkommentere de relevante linjer alt efter behov:Bemærk
Klik for at se koden
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1Konfigurer OpenVPN-klienten
Den endelige konfigurationsfil
client.conf
skal se således ud: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 1Configure OpenVPN (Windows only)
For at etablere et handshake skal du konfigurere OpenSSL, der er inkluderet i OpenVPN.
Opret mappen
ssl
iC:\Program Files\OpenVPN
og opret filenopenssl.cnf
med følgende indhold :openssl_conf = default_conf
[ default_conf ] ssl_conf = ssl_sect
[ ssl_sect ] system_default = ssl_default_sect
[ ssl_default_sect ] SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocol = TLSv1.2 MinProtocol = TLSv1.2
Med denne ændring vil du ikke have fejl som rapporteret her, her og her.
Kendte problemer
Der er nogle kendte problemer i forbindelse med OpenVPN-login med OpenSC. Se venligst disse problemer ` her <https://github.com/Nitrokey/wiki/wiki/3rd-Party-Issues>`_.
8. Start OpenVPN-klienten#
Start OpenVPN-tjenesten på klienten
Aktiver OpenVPN-tjenesten, og start den ved hjælp af disse kommandoer:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.serviceBrug denne kommando for at dobbelttjekke, om OpenVPN-tjenesten er aktiv:
$ sudo systemctl status openvpn-server@server.serviceIndtast din bruger-PIN-kode
Når du udfører OpenVPN-klienten, skal du indtaste Nitrokey’s PIN-kode:
$ 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: ******Advarsel
Unfortunately OpenVPN doesn’t seem to be able to establish a handshake on some operating systems 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)I nogle rapporterede tilfælde beder den ikke om en PIN-kode på terminalen. En løsning kan være at bruge denne kommando til at logge ind med PIN-koden:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Alternativt kan du genkompilere OpenVPN-klienten med systemd-understøttelse deaktiveret, og den vil bede dig om PIN-koden som forventet.
En anden mulighed er at logge ind på din OpenVPN-instans med Viscosity-klienten, som giver en bedre brugeroplevelse, især når du skal indtaste PIN-koden.