Configuración de OpenVPN con Easy-RSA#
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Nota
Esta guía es un trabajo en curso, y se actualizará de forma periódica. Por favor, tenga en cuenta este estado.
Esta guía muestra cómo configurar los clientes OpenVPN para que inicien sesión utilizando una Nitrokey Pro 2 o una Nitrokey Storage 2. Para la gestión de claves por software utilizaremos Easy-RSA, una utilidad que ha ido evolucionando junto a 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).
Utilizaremos Easy-RSA, porque parece proporcionar cierta flexibilidad, y permite la gestión de claves a través de PKIs externas. Lo utilizaremos en el servidor para emitir la solicitud de firma, y repetiremos el mismo proceso en el cliente. Las solicitudes de firma de certificados serán firmadas por la CA en el HSM de Nitorkey, y retransmitidas al servidor y al cliente.
Requisitos previos#
En la siguiente documentación necesitaremos 3 máquinas diferentes como las siguientes:
Servidor OpenVPN (v. 2.5) en Debian 10 (máquina virtual EC2 - AWS)
Cliente OpenVPN (v. 2.4.9) en Fedora 30 (máquina local)
La Autoridad de Certificación será accesible desde una máquina independiente con Fedora 30 (máquina local)
Para interactuar con los dispositivos necesitaremos OpenSC 0.20 instalado en la máquina cliente y en la máquina CA (las máquinas locales). Puedes seguir las instrucciones para configurarlo en este enlace (*Unix).
Para descargar las dependencias en las máquinas Fedora podemos esta instrucción:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Para Debian Linux, los paquetes más recientes de OpenSC están disponibles aquí.
Utilizaremos las siguientes Nitrokeys para la gestión de claves físicas:
Una clave de autenticación utilizando el Nitrokey Pro 2 (pdf)
Una autoridad de certificación (CA) que utiliza el Nitrokey HSM 2 (pdf)
Como recordatorio, para crear una autoridad de certificación en Nitrokey HSM 2, puede seguir las instrucciones disponibles ` en la documentación <certificate-authority.html#sign-a-server-certificate>`_.
Alternativamente, puede configurar su propia CA en un en una máquina separada, o utilizar el tutorial de OpenVPN que también se basa en Easy-RSA. Las 2 últimas opciones dependen de soluciones de software para la gestión de claves.
Del lado del servidor#
1. Instalar OpenVPN#
Primero tenemos que habilitar el Reenvío de IPs editando el archivo
/etc/sysctl.conf
.$ editor /etc/sysctl.confDescomente o edite en consecuencia la siguiente línea
net.ipv4.ip_forward=1Cierre después de guardarlo, e introduzca este comando
$ sysctl -pUna vez realizado el reenvío de IP, tendremos que descargar la última versión de OpenvPN para nuestro servidor Debian 10, según estas instrucciones:
Cambie a root y descargue la clave GPG que firmó el paquete
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -Añade la URL de los paquetes OpenVPN adecuados al archivo
sources.list
.# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitDescargamos OpenVPN 2.5 ya que el «password prompt» requiere al menos OpenVPN versión 2.4.8 para iniciar sesión.
A continuación, descargamos OpenVPN
$ sudo apt install openvpnSi quieres comprobar la versión, es posible llamando a
--version
e imprimir lo siguiente:$ 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. Instalar Easy-RSA#
Para construir la PKI, descargaremos la última versión de Easy-RSA en las máquinas servidoras y clientes. Para obtener la última versión, ve a la página Releases en el proyecto oficial GitHub de EasyRSA, copia el enlace de descarga del archivo que termina en
.tgz
, y luego pégalo en el siguiente comando:
Descargue la última versión
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzExtraer el tarball
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Crear una PKI para el servidor OpenVPN#
Antes de crear la clave privada y el certificado de su servidor OpenVPN, debe crear un directorio local de Infraestructura de Clave Pública en su servidor OpenVPN. Utilizará este directorio para gestionar las solicitudes de certificados del servidor y de los clientes, en lugar de hacerlas directamente en su servidor de CA.
Para construir un directorio PKI en su servidor OpenVPN, tendrá que rellenar un archivo llamado
vars
con algunos valores por defecto.
Crear un archivo
vars
$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsUna vez abierto el archivo, pegue las dos líneas siguientes
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Estas son las únicas dos líneas que necesitas en este archivo
vars
en tu servidor OpenVPN ya que no se utilizará como Autoridad de Certificación. Se asegurarán de que sus claves privadas y solicitudes de certificados estén configuradas para utilizar la criptografía de curva elíptica (ECC) para generar claves, y firmas seguras para sus clientes y el servidor OpenVPN.En cuanto a la elección de los algoritmos criptográficos, sigo el modelo de este tutorial, y puedes personalizarlos según tus necesidades específicas.
Inicializar la PKI
Una vez que haya rellenado el archivo
vars
puede proceder a crear el directorio PKI. Para ello, ejecuta el script easyrsa con la opción init-pki:$ ./easyrsa init-pkiUna vez que haya inicializado su PKI en el servidor OpenVPN, estará listo para pasar al siguiente paso, que es crear una solicitud de certificado y una clave privada para el servidor OpenVPN.
4. Crear server.req
y server.key
.#
Ahora que su servidor OpenVPN tiene todos los requisitos previos instalados, el siguiente paso es generar un par de claves compuesto por una clave privada (para mantenerla en secreto), y una solicitud de firma de certificado (
.csr
) en su servidor OpenVPN.En términos generales, en los sistemas en los que generamos una clave y una petición, estos archivos se dejan sin encriptar utilizando el argumento
nopass
, ya que los servidores suelen necesitar arrancar sin introducir ninguna contraseña. Esto genera una clave no encriptada, así que ten en cuenta proteger su acceso y los permisos de los archivos con cuidado.Truco
Notas de configuración de 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.
El certificado del servidor debe tener lo siguiente:
keyUsage: digitalSignature, keyEncipherment
extendedKeyUsage: serverAuth
Crear la solicitud de firma para el servidor
Navega al directorio
~/easyrsa
en tu servidor OpenVPN como usuario no root, e introduce los siguientes comandos:$ cd easyrsa/ $ ./easyrsa gen-req server nopassEsto creará una clave privada para el servidor y un archivo de solicitud de certificado llamado
server.req
.Una vez que tenga el certificado firmado, lo transferirá al servidor OpenVPN.
Copiar la clave en el directorio del servidor OpenVPN
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/Después de completar estos pasos, ha creado con éxito una clave privada para su servidor OpenVPN. También ha generado una solicitud de firma de certificado para el servidor OpenVPN.
Truco
Extensiones de archivos para solicitudes de firma de certificados
La extensión de archivo que adopta el tutorial de CA y HSM indica la creación de un archivo
.csr
, sin embargo Easy-RSA crea solicitudes de firma de certificados con una extensión.req
.Utilizaremos indistintamente ambas extensiones, mientras nos aseguramos de transferir los archivos correctos a la Autoridad Certificadora, y generar un certificado final con una extensión
.crt
.En la siguiente sección de esta guía, firmaremos un archivo
.req
con nuestra CA desplegada en el dispositivo HSM 2. Para ello, utilizaré una máquina dedicada para firmar las peticiones.
5. Firmar y recuperar server.crt
#
Las siguientes instrucciones requieren la transferencia del archivo
server.req
(oserver.csr
) al sistema CA.La transferencia en sí no es sensible a la seguridad, aunque es conveniente verificar si el archivo recibido coincide con la copia del remitente, si el transporte no es de confianza.
Para realizar estos pasos, me apoyaré ampliamente en estas instrucciones, para firmar las solicitudes de firma de certificados, una vez que las hemos generado con Easy-RSA.
Firme el archivo ``server.req`
En la máquina local dedicada a acceder al HSM, utilizaremos las herramientas proporcionadas por Opensc 0.20 para firmar el archivo
.req
, y enviarlo de vuelta al servidor OpenVPN. Suponemos que hemos transferido el archivo desde la máquina del servidor a la máquina de la CA.Primero empezamos por enchufar el HSM Nitrokey, y entramos en esta instrucción para listar las llaves disponibles.
Consultar la lista de dispositivos disponibles
$ p11tool --list-all(Paso obligatorio) Si es la primera vez que firma un certificado con la CA, es posible que desee recuperar el URI de la clave privada de la CA desde el HSM e incluirlo en el archivo de configuración.
Nota
El URI de la llave debe tener este 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=privateCrear
openvpn/
directorio bajocertificate-authority/
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Firma el
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. Recuperar el archivo
server.crt
a la máquina del servidor
Transferir los certificados firmados al servidor
Desde la máquina CA, copiamos los ficheros
server.crt
ychain.crt
al servidor OpenVPN. En este ejemplo utilizaremos el comandoscp
como sigue:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpColocar los certificados en el directorio del servidor
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverAdvertencia
Certificado CA y
chain.crt
En lo anterior, la CA devuelve el certificado firmado del servidor, e incluye el certificado de la CA
CA.crt
que es el archivo<x id="117"></x id="126"></x>`. Esto puede hacerse a través de un canal inseguro, aunque se anima al cliente a confirmar si el ``chain.crt
recibido es válido, si el transporte no es de confianza.Es posible renombrar el archivo
chain.crt
aCA.crt
en la máquina de destino, sin embargo usaremoschain.crt
en las siguientes instrucciones.
6. Configurar el servidor OpenVPN#
Una conexión que utiliza TLS requiere múltiples certificados y claves para la autenticación. Ahora que los hemos emitido y firmado, podemos colocarlos en los directorios adecuados. El desglose de los certificados y claves que deben ubicarse en el directorio raíz son los siguientes:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)En tu servidor OpenVPN, ahora puedes crear el archivo de configuración
server.conf
con tu editor de texto favorito. El archivo puede ser configurado de acuerdo a sus necesidades, mientras que nos aseguramos de cambiar el certificado del servidor y las secciones clave de acuerdo a los nombres que eligió para el su los archivos que firmamos:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keyAquí está el archivo de configuración que podemos utilizar para probar estas instrucciones:
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 versionPara comprobar si la configuración funciona correctamente, podemos utilizar este comando:
$ sudo openvpn --server --config server.conf
7. Inicie el servicio OpenVPN en el servidor#
Habilite el servicio OpenVPN añadiéndolo a systemctl, e inícielo utilizando estos comandos:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverPara comprobar dos veces si el servicio OpenVPN está activo, utilice este comando:
$ sudo systemctl status openvpn@serverEl OpenVPN debería estar funcionando en este punto.
Configuración del lado del cliente#
1. Instalar OpenVPN y Easy-RSA#
Instalar el software
Podemos utilizar directamente
dnf install
para instalar OpenVPN 2.4.9 y Easy-RSA 3.0.7$ sudo dnf install openvpn easy-rsaLuego creamos como no-root un directorio para Easy RSA llamado
Easy-RSA
$ mkdir ~/easyrsaY enlazarlo con el paquete Easy RSA que acabamos de instalar
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Crear una PKI para el cliente OpenVPN#
De la misma manera que creamos una PKI en el servidor OpenVPN, crearemos una PKI usando Easy-RSA en el lado del cliente.
3. Crear un client.req
y client.key
.#
De la misma manera que emitimos el par de claves en el servidor, generamos un par de claves para el cliente que estará compuesto por el fichero
client.req
y el ficheroclient.key
. Este último debe mantenerse en secreto en la máquina cliente.
4. Firmar client.req
y emitir el fichero client.crt
.#
Para transferir el archivo
client.req
a la máquina CA, utilizaremos el mismo método que utilizamos para el archivoserver.req
.Una vez transferido, en la máquina de la CA firmamos el archivo de solicitud de firma de certificado con este comando
$ 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. Importar client.crt
en la Nitrokey desde la máquina CA.#
Después de crear el archivo
client.crt
, conectamos el dispositivo Nitrokey Pro 2 en la máquina CA, e importamos el.crt
al dispositivo Pro 2 utilizando este comando:$ pkcs15-init --store-certificate client.crt --id 3Puedes ver si la clave está efectivamente almacenada en el Nitrokey usando este comando:
$ pkcs15-tool -cO bien
$ pkcs11-tool --list-objectsPara más comandos puedes consultar la wiki de OpenSC.
6. Recuperar el archivo chain.crt
de la máquina CA.#
While we keep the
client.crt
stored on the nitrokey Pro 2 device, we must retrieve thechain.crt
file on the client machine, and store it in the adequate directory. We may usescp
as in the method explained in the server section of this guide.
7. Configurar el cliente para interactuar con el Nitrokey#
Ahora, de vuelta en la máquina cliente, conectaremos el Nitrokey Pro y lo utilizaremos para establecer la conexión VPN con el servidor. En términos generales, una conexión que utiliza TLS requiere múltiples certificados y claves para la autenticación:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keyPara esta guía podemos el siguiente archivo
client.conf
, y añadirle las opciones necesarias en consecuencia: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
Determinar el objeto correcto
Cada proveedor PKCS#11 puede admitir varios dispositivos. Para ver la lista de objetos disponibles puede utilizar el siguiente comando:
$ 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=%03Cada par certificado/clave privada tiene una cadena única
Serialized id
. La cadena de id serializada del certificado solicitado debe ser especificada, en el archivo de configuración. Podemos hacerlo añadiendo la opciónpkcs11-id
utilizando comillas simples.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Añadir el ID serializado recuperado al archivo de configuración
Utilizando su editor de texto favorito, abra el archivo server.conf, y añada las siguientes líneas, teniendo cuidado de insertar las suyas propias
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'Para la configuración adicional relacionada con la autenticación OpenVPN, también puede añadir unas líneas para manejar la gestión de claves, aunque es opcional.
Nota
Haga clic para ver el código
# 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 PINPaso opcional
Si necesitas probar la configuración, con y sin el token en la Nitrokey, puedes añadir líneas al mismo
client.conf
y comentar/descomentar las líneas pertinentes según tus necesidades:Nota
Haga clic para ver el código
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1Configurar el cliente OpenVPN
El archivo de configuración final
client.conf
debería tener este aspecto: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)
Para establecer un handshake, debe configurar OpenSSL incluido en OpenVPN.
Create the directory
ssl
inC:\Program Files\OpenVPN
and create fileopenssl.cnf
with the following content :openssl_conf = default_conf
[ default_conf ] ssl_conf = ssl_sect
[ ssl_sect ] system_default = ssl_default_sect
[ ssl_default_sect ] Algoritmos de firma = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocolo = TLSv1.2 MinProtocolo = TLSv1.2
Con esta modificación, usted no tendrá error como se informa aquí, aquí y aquí
Problemas conocidos
Hay algunos problemas conocidos relacionados con el inicio de sesión de OpenVPN con OpenSC. Por favor, consulte estos problemas aquí.
8. Inicie el cliente OpenVPN#
Iniciar el servicio OpenVPN en el cliente
Habilite el servicio OpenVPN, e inícielo utilizando estos comandos:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.servicePara comprobar si el servicio OpenVPN está activo, utilice este comando:
$ sudo systemctl status openvpn-server@server.serviceIntroduzca su PIN de usuario
Al ejecutar el cliente OpenVPN, es necesario introducir el PIN de Nitrokey:
$ 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: ******Advertencia
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)En algunos casos reportados no pide el PIN en la terminal. Una solución sería utilizar este comando para iniciar sesión con el PIN:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Alternativamente, podrías recompilar el cliente OpenVPN con el soporte de systemd deshabilitado, y te pedirá el PIN como se espera.
Otra opción, sería iniciar sesión en su instancia OpenVPN con el cliente Viscosity que proporciona una mejor experiencia de usuario, especialmente para introducir el PIN.