Configuration d’OpenVPN avec Easy-RSA#
Note
Ce guide est en cours de réalisation et sera mis à jour régulièrement. Veuillez prendre ce statut en considération.
Ce guide montre comment configurer les clients OpenVPN pour qu’ils se connectent en utilisant une Nitrokey Pro 2 ou une Nitrokey Storage 2. Pour la gestion des clés logicielles, nous utiliserons Easy-RSA, un utilitaire qui a évolué parallèlement à OpenVPN.
Pour signer les certificats, nous utiliserons un Nitrokey HSM 2 configuré comme Autorité de Certification, cependant ce guide ne couvre pas la mise en place de l’AC elle-même (elle est claire et bien documentée ici).
Nous utiliserons Easy-RSA, car il semble offrir une certaine flexibilité et permet la gestion des clés via des PKI externes. Nous l’utiliserons sur le serveur pour émettre la demande de signature, et répéterons le même processus sur le client. Les demandes de signature de certificat seront signées par l’autorité de certification sur le Nitorkey HSM, et retransmises au serveur et au client.
Conditions préalables#
Dans la documentation suivante, nous aurons besoin de 3 machines différentes comme suit :
Serveur OpenVPN (v. 2.5) sur Debian 10 (machine virtuelle EC2 - AWS)
Client OpenVPN (v. 2.4.9) sur Fedora 30 (machine locale)
L’autorité de certification sera accessible depuis une machine autonome équipée de Fedora 30 (machine locale).
Pour interagir avec les appareils, nous aurons besoin de OpenSC 0.20 installé sur la machine du client et de l’AC (les machines locales). Vous pouvez suivre les instructions pour le configurer dans ce lien (*Unix).
Pour télécharger les dépendances sur les machines Fedora, nous pouvons suivre cette instruction :
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Pour Debian Linux, des paquets OpenSC plus récents sont disponibles ici.
Nous utiliserons les Nitrokeys suivants pour la gestion des clés physiques :
Une clé d’authentification utilisant la `Nitrokey Pro 2 (pdf) <https://www.nitrokey.com/files/doc/Nitrokey_Pro_factsheet.pdf>`___.
Une autorité de certification (CA) utilisant le Nitrokey HSM 2 (pdf).
Pour rappel, pour construire une autorité de certification sur Nitrokey HSM 2, vous pouvez suivre les instructions disponibles dans la documentation.
Vous pouvez également configurer votre propre AC sur une sur une machine séparée, ou utiliser le tutoriel OpenVPN qui s’appuie également sur Easy-RSA. Les 2 dernières options s’appuient sur des solutions logicielles pour la gestion des clés.
Côté serveur#
Installer OpenVPN#
D’abord, nous devons activer le transfert d’IP en éditant le fichier
/etc/sysctl.conf
.$ editor /etc/sysctl.conf
Décommentez ou modifiez en conséquence la ligne suivante
net.ipv4.ip_forward=1
Fermez après l’avoir sauvegardé, et entrez cette commande
$ sysctl -p
Une fois le transfert d’IP effectué, nous devrons télécharger la dernière version d’OpenvPN pour notre serveur Debian 10, selon ces instructions :
Passez à l’utilisateur root et téléchargez la clé GPG qui a signé le paquet.
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
Ajoutez l’URL des paquets OpenVPN adéquats au fichier
sources.list
.# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exit
Nous avons téléchargé OpenVPN 2.5 car « password prompt » nécessite au moins OpenVPN version 2.4.8 pour se connecter.
Ensuite, nous téléchargeons OpenVPN
$ sudo apt install openvpn
Si vous voulez vérifier la version, c’est possible en appelant
--version
et en imprimant ce qui suit :$ 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
Installer Easy-RSA#
Pour construire l’ICP, nous allons télécharger la dernière version d’Easy-RSA sur les machines serveur et client. Pour obtenir la dernière version, allez sur la page Releases du projet officiel EasyRSA GitHub, copiez le lien de téléchargement du fichier se terminant par .tgz
, puis collez-le dans la commande suivante :
Télécharger la dernière version
$ cd ~ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
Extraire l’archive
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
Créer une PKI pour le serveur OpenVPN#
Avant de pouvoir créer la clé privée et le certificat de votre serveur OpenVPN, vous devez créer un répertoire local Public Key Infrastructure sur votre serveur OpenVPN. Vous utiliserez ce répertoire pour gérer les demandes de certificats du serveur et des clients, au lieu de les faire directement sur votre serveur CA.
Pour construire un répertoire PKI sur votre serveur OpenVPN, vous aurez besoin de remplir un fichier appelé vars
avec quelques valeurs par défaut.
Créer un fichier « vars ».
$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor vars
Une fois le fichier ouvert, collez les deux lignes suivantes
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"
Ce sont les deux seules lignes dont vous avez besoin dans ce fichier ``vars`” sur votre serveur OpenVPN puisqu’il ne sera pas utilisé comme Autorité de Certification. Elles assureront que vos clés privées et vos demandes de certificats sont configurées pour utiliser la cryptographie à courbe elliptique (ECC) pour générer des clés et des signatures sécurisées pour vos clients et votre serveur OpenVPN.
En ce qui concerne le choix des algorithmes cryptographiques, je suis le modèle de ce tutoriel, et vous pouvez les personnaliser en fonction de vos besoins spécifiques.
Initialiser l’ICP
Une fois que vous avez rempli le fichier
vars
, vous pouvez procéder à la création du répertoire PKI. Pour ce faire, exécutez le script easyrsa avec l’option init-pki :$ ./easyrsa init-pki
Après avoir initialisé votre PKI sur le serveur OpenVPN, vous êtes prêt à passer à l’étape suivante, qui consiste à créer une demande de certificat et une clé privée pour le serveur OpenVPN.
Créer server.req
et server.key
#
Maintenant que votre serveur OpenVPN a tous les pré-requis installés, l’étape suivante consiste à générer une paire de clés composée d’une clé privée (à garder secrète), et d’un Certificate Signing Request (.csr
) sur votre serveur OpenVPN.
En termes généraux, sur les systèmes où nous générons une clé et une requête, ces fichiers sont laissés en clair en utilisant l’argument ``nopass`”, puisque les serveurs doivent généralement démarrer sans aucune entrée de mot de passe. Cela génère une clé non chiffrée, il faut donc faire attention à protéger son accès et ses permissions de fichiers.
Astuce
Notes de configuration d’OpenVPN :
Le serveur, et chaque client, doit avoir son propre fichier de cert et de clé. Le serveur et tous les clients utiliseront le même fichier CA.
Le certificat du serveur doit avoir les éléments suivants :
Utilisation de la clé : signature numérique, chiffrement de la clé
extendedKeyUsage : serverAuth
Créer la demande de signature pour le serveur
Naviguez dans le répertoire
~/easyrsa
sur votre serveur OpenVPN en tant qu’utilisateur non-root, et entrez les commandes suivantes :$ cd easyrsa/ $ ./easyrsa gen-req server nopass
Cela va créer une clé privée pour le serveur et un fichier de demande de certificat appelé
server.req
.Une fois que vous avez un certificat signé, vous allez le transférer au serveur OpenVPN.
Copier la clé dans le répertoire du serveur OpenVPN
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/
Après avoir complété ces étapes, vous avez réussi à créer une clé privée pour votre serveur OpenVPN. Vous avez également généré un Certificate Signing Request pour le serveur OpenVPN.
Astuce
Extensions de fichiers pour les demandes de signature de certificats
L’extension de fichier adoptée par le tutoriel CA et HSM indique la création d’un fichier
.csr
, cependant Easy-RSA crée des demandes de signature de certificat avec une extension.req
.Nous utiliserons indifféremment les deux extensions, tout en nous assurant que nous transférons les bons fichiers à l’Autorité de Certification, et que nous générons un certificat final avec une extension
.crt
.
Dans la prochaine section de ce guide, nous allons signer un fichier .req
avec notre CA sur déployé sur le dispositif HSM 2. Pour cela, je vais utiliser une machine dédiée pour signer les requêtes.
Signer et récupérer server.crt
#
Les instructions suivantes nécessitent le transfert du fichier server.req
(ou server.csr
) vers le système CA.
Le transfert lui-même n’est pas sensible à la sécurité, mais il est sage de vérifier si le fichier reçu correspond à la copie de l’expéditeur, si le transport n’est pas fiable.
Afin de suivre ces étapes, je m’appuierai largement sur ces instructions, pour signer les demandes de signature de certificat, une fois que nous les avons générées avec Easy-RSA.
Signer le fichier server.req
.#
Sur la machine locale dédiée à l’accès au HSM, nous utiliserons les outils fournis par Opensc 0.20 afin de signer le fichier .req
, et de le renvoyer au serveur OpenVPN. Nous supposons que nous avons transféré le fichier de la machine serveur à la machine de l’AC.
Commençons par brancher le HSM Nitrokey, et entrons dans cette instruction pour lister les touches disponibles.
Interroger la liste des dispositifs disponibles
$ p11tool --list-all
(Étape obligatoire) Si c’est la première fois que vous signez un certificat avec l’autorité de certification, vous pouvez récupérer l’URI de la clé privée de l’autorité de certification à partir du HSM et l’inclure dans le fichier de configuration.
L’URI de la clé doit être dans ce 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=private
Créer le répertoire
openvpn/
souscertificate-authority/
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/
Signer le fichier
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
Récupérer le fichier server.crt
sur la machine serveur#
Transférez les certificats signés vers le serveur
Depuis la machine CA, copiez les fichiers
server.crt
etchain.crt
sur le serveur OpenVPN. Dans cet exemple, nous allons utiliser la commandescp
comme suit :$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
Placez les certificats dans le répertoire du serveur
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/server
Avertissement
Certificat de l’AC et
chain.crt
Dans l’exemple ci-dessus, l’AC renvoie le certificat de sévérité signé, et inclut le certificat d’AC
CA.crt
qui est le fichierchain.crt
. Cela peut être fait sur un canal non sécurisé, mais le client est encouragé à confirmer si la chaîne reçue est valide, si le transport n’est pas fiable.Il est possible de renommer le fichier
chain.crt
en ``CA.crt`” sur la machine cible, cependant nous utiliserons ``chain.crt`” dans les prochaines instructions.
Configurer le serveur OpenVPN#
Une connexion qui utilise TLS nécessite plusieurs certificats et clés pour l’authentification. Maintenant que nous avons émis et signé ces derniers, nous pouvons les placer dans les bons répertoires. La répartition des certificats et des clés qui doivent se trouver dans le répertoire racine sont les suivants :
Le fichier du certificat racine (CA.crt ou chain.crt dans notre configuration)
Certificat du serveur
Clé du serveur
Paramètres Diffie Hellman (facultatif)
Sur votre serveur OpenVPN, vous pouvez maintenant créer le fichier de configuration server.conf
avec votre éditeur de texte préféré. Le fichier peut être configuré selon vos besoins, tandis que nous nous assurons de changer les sections du certificat et de la clé du serveur selon les noms que vous avez choisis pour les fichiers que nous avons signés :
# OpenVPN Server Certificate - CA, server key and certificate
ca chain.crt
cert server.crt
key server.key
Voici le fichier de configuration que nous pouvons utiliser pour tester ces instructions :
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
Pour tester si la configuration fonctionne correctement, nous pouvons utiliser cette commande :
$ sudo openvpn --server --config server.conf
Démarrer le service OpenVPN sur le serveur#
Activez le service OpenVPN en l’ajoutant à systemctl, et démarrez-le en utilisant ces commandes :
$ sudo systemctl -f enable openvpn@server
$ sudo systemctl start openvpn@server
Pour vérifier doublement si le service OpenVPN est actif, utilisez cette commande :
$ sudo systemctl status openvpn@server
L’OpenVPN devrait fonctionner à ce stade.
Configuration côté client#
Installer OpenVPN et Easy-RSA#
Installer le logiciel
Nous pouvons utiliser directement
dnf install
pour installer OpenVPN 2.4.9 et Easy-RSA 3.0.7sudo dnf install openvpn easy-rsa
Ensuite, nous créons en tant que non-root un répertoire pour Easy RSA appelé
Easy-RSA
.$ mkdir ~/easyrsa
Et le lier au paquet Easy RSA que nous venons d’installer
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
Créer une PKI pour le client OpenVPN#
De la même manière que nous avons créé une PKI sur le serveur OpenVPN, nous allons créer une PKI utilisant Easy-RSA du côté client.
Créer un client.req
et un client.key
#
De la même manière que nous avons émis la paire de clés sur le serveur, nous générons une paire de clés pour le client qui sera composée du fichier client.req
et du fichier client.key
. Ce dernier doit être gardé secret sur la machine du client.
Signez client.req
et publiez le fichier client.crt
.#
Pour transférer le fichier client.req
vers la machine de l’AC, nous allons utiliser la même méthode que pour le fichier server.req
.
Une fois transféré, sur la machine de l’AC, nous signons le fichier de demande de signature de certificat avec cette commande
$ 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
Importer client.crt
sur la Nitrokey à partir de la machine CA#
Après avoir créé le fichier client.crt
, nous branchons le dispositif Nitrokey Pro 2 sur la machine CA, et importons le .crt
sur le dispositif Pro 2 en utilisant cette commande :
$ pkcs15-init --store-certificate client.crt --id 3
Vous pouvez voir si la clé est effectivement stockée sur la Nitrokey en utilisant cette commande :
$ pkcs15-tool -c
Ou alternativement
$ pkcs11-tool --list-objects
Pour plus de commandes, vous pouvez vous référer au Wiki OpenSC.
Récupérer le fichier chain.crt
de la machine de l’AC#
Alors que nous gardons le fichier client.crt
stocké sur le périphérique nitrokey Pro 2, nous devons récupérer le fichier chain.crt
sur la machine cliente, et le stocker dans le répertoire adéquat. Nous pouvons utiliser scp
comme dans la méthode expliquée dans la section serveur de ce guide.
Configurer le client pour qu’il interagisse avec la Nitrokey#
De retour sur l’ordinateur client, nous allons brancher la Nitrokey Pro et l’utiliser pour établir la connexion VPN avec le serveur. En termes généraux, une connexion qui utilise TLS nécessite plusieurs certificats et clés pour l’authentification :
Le fichier du certificat racine (chain.crt)
Certificat du client
Clé du client
Pour ce guide, nous pouvons utiliser le fichier client.conf
suivant, et y ajouter les options requises en conséquence :
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
Déterminer le bon objet
Chaque fournisseur PKCS#11 peut prendre en charge plusieurs appareils. Afin d’afficher la liste des objets disponibles, vous pouvez utiliser la commande suivante :
$ 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
Chaque paire certificat/clé privée a une chaîne d’identification sérialisée unique. La chaîne d’identification sérialisée du certificat demandé doit être spécifiée dans le fichier de configuration. Nous pouvons le faire en ajoutant l’option
pkcs11-id
en utilisant des guillemets simples.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
Ajouter l’ID sérialisé récupéré au fichier de configuration
En utilisant votre éditeur de texte préféré, ouvrez le fichier server.conf, et ajoutez les lignes suivantes, en prenant soin d’insérer votre propre
Identifiant sérialisé
: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'
Pour les réglages supplémentaires liés à l’authentification OpenVPN, vous pouvez également ajouter quelques lignes pour gérer la gestion des clés, bien que cela soit facultatif.
Note
Cliquez pour voir le code
# 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
Étape facultative
Si vous avez besoin de tester la configuration, avec et sans le jeton sur la Nitrokey, vous pouvez ajouter des lignes au même
client.conf
et commenter/décommenter les lignes pertinentes en fonction de vos besoins :Note
Cliquez pour voir le code
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1
Configurer le client OpenVPN
Le fichier de configuration final
client.conf
devrait ressembler à celui-ci :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
Problèmes connus
Il y a quelques problèmes connus liés à la connexion OpenVPN avec OpenSC. Veuillez consulter ces problèmes ici.
Démarrer le client OpenVPN#
Démarrer le service OpenVPN sur le client
Activez le service OpenVPN, et démarrez-le en utilisant ces commandes :
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.service
Pour vérifier si le service OpenVPN est actif, utilisez cette commande :
$ sudo systemctl status openvpn-server@server.service
Saisissez votre code PIN utilisateur
Lors de l’exécution du client OpenVPN, le PIN de Nitrokey doit être saisi :
$ 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: ******
Avertissement
Malheureusement, OpenVPN ne semble pas pouvoir établir un handshake et s’arrête sur une erreur telle que signalée here, ici et ici.
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)
Dans certains cas, il ne demande pas de code PIN sur le terminal. Une solution de contournement serait d’utiliser cette commande pour se connecter avec le code PIN :
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>
Alternativement, vous pourriez recompiler le client OpenVPN avec le support systemd désactivé, et il vous demandera le PIN comme prévu.
Une autre option serait de se connecter à votre instance OpenVPN avec le client Viscosity qui offre une meilleure expérience utilisateur, notamment pour la saisie du PIN.