Configuração OpenVPN com Easy-RSA#
O LED da NextBox mudará para <x id=»31»></x>azul<x id=»36»></x> em cada pressão, após a segunda pressão mudará para azul intermitente (ver Documentação LED). Uma vez que o LED tenha finalmente atingido <x id=»187»></x>verde<x id=»193»></x> novamente durante pelo menos 20 segundos o seu NextBox está pronto para ser utilizado novamente. Por favor, não desligue o NextBox durante este processo, pois isso pode partir alguma coisa. |
|||||||
---|---|---|---|---|---|---|---|
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Nota
Este guia é um trabalho em progresso, e será actualizado de acordo com a sua actualização. Por favor, leve este status em consideração.
Este guia mostra como configurar clientes OpenVPN para iniciar sessão usando um Nitrokey Pro 2 ou um Nitrokey Storage 2. Para gestão de chaves de software estaremos a usar `Easy-RSA <https://github.com/OpenVPN/easy-rsa>>x id=»343»></x>__, um utilitário que tem vindo a evoluir juntamente com o 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).
Vamos usar o Easy-RSA, porque parece proporcionar alguma flexibilidade, e permite a gestão de chaves através de PKIs externos. Vamos usá-lo no servidor para emitir o pedido de assinatura, e repetir o mesmo processo no cliente. Os pedidos de assinatura de certificados serão assinados pela CA no Nitorkey HSM, e retransmitidos ao servidor e ao cliente.
Pré-requisitos#
Na documentação seguinte serão necessárias 3 máquinas diferentes, como a seguir:
Servidor OpenVPN (v. 2.5) na Debian 10 (máquina virtual EC2 - AWS)
Cliente OpenVPN (v. 2.4.9) no Fedora 30 (máquina local)
A Autoridade Certificadora estará acessível a partir de uma máquina autônoma com Fedora 30 (máquina local)
Para interagir com os dispositivos, iremos requerer OpenSC 0,20 instalado na máquina cliente e CA (as máquinas locais). Pode seguir as instruções para a configurar em ` este link (*Unix) <https://github.com/OpenSC/OpenSC/wiki/Compiling-and-Installing-on-Unix-flavors>`__.
Para descarregar as dependências das máquinas Fedora, podemos fazer esta instrução:
su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'
Para Debian Linux, estão disponíveis pacotes OpenSC mais recentes here.
Utilizaremos os seguintes Nitrokeys para a gestão da chave física:
Uma chave de autenticação usando a Nitrokey Pro 2 (pdf)
Uma Autoridade Certificadora (AC) usando o Nitrokey HSM 2 (pdf)
Como lembrete, para construir uma Autoridade Certificadora no Nitrokey HSM 2, você pode seguir as instruções disponíveis ` na documentação <certificate-authority.html#sign-a-server-certificate>`_.
Alternativamente, pode configurar a sua própria CA num ` numa máquina separada <https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-ubuntu-20-04>`__, ou utilizar o tutorial OpenVPN que também se baseia em Easy-RSA. As últimas 2 opções dependem de soluções de software para a gestão de chaves.
Lado do servidor#
1. Instalar OpenVPN#
Primeiro precisamos habilitar o IP Forwarding editando
/etc/sysctl.conf
arquivo$ editor /etc/sysctl.confDescomentar ou editar em conformidade a seguinte linha
net.ipv4.ip_forward=1Feche depois de salvá-lo, e digite este comando
$ sysctl -pUma vez feito o reencaminhamento IP, teremos de descarregar a última versão do OpenvPN para o nosso servidor Debian 10, de acordo com estas instruções:
Mude para root e baixe a chave GPG que assinou o pacote
$ sudo -s # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -Adicione a URL dos pacotes OpenVPN adequados ao arquivo
sources.list
arquivo# echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list # exitDescarregámos o OpenVPN 2.5 como «prompt de senha» requer pelo menos OpenVPN `versão 2.4.8 <https://community.openvpn.net/openvpn/ticket/1215>>x id=»139»></x>__ para iniciar sessão.
A seguir baixamos o OpenVPN
$ sudo apt install openvpnSe você quiser verificar a versão, é possível chamar
--version
e imprimir o seguinte:$ 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 o PKI, iremos descarregar a última versão do Easy-RSA nas máquinas do servidor e do cliente. Para obter a última versão, vá para a página Lançamento no projecto oficial do EasyRSA GitHub, copie o link para o ficheiro que termina em
.tgz
, e depois cole-o no seguinte comando:
Faça o download do último lançamento
$ cd ~ $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgzExtrair o tarball
$ cd ~ $ tar xvf EasyRSA-3.0.7.tgz $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
3. Criar um PKI para o servidor OpenVPN#
Antes de poder criar a chave privada e o certificado do seu servidor OpenVPN, você precisa criar um diretório local de Infraestrutura de Chave Pública no seu servidor OpenVPN. Você usará esse diretório para gerenciar os pedidos de certificados do servidor e dos clientes, em vez de fazê-los diretamente no seu servidor CA.
Para construir um diretório PKI no seu servidor OpenVPN, você precisará preencher um arquivo chamado
vars
com alguns valores padrão.
Criar um ficheiro
vars`
ficheiro$ touch ~/easyrsa/vars $ cd easyrsa/ $ editor varsUma vez aberto o arquivo, cole nas duas linhas a seguir
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Estas são as duas únicas linhas que você precisa neste
vars
arquivo no seu servidor OpenVPN já que não será usado como Autoridade Certificadora. Eles assegurarão que suas chaves privadas e pedidos de certificados sejam configurados para usar a Criptografia Elíptica Curva (ECC) para gerar chaves, e assegurar assinaturas para seus clientes e servidor OpenVPN.Em relação à escolha dos algoritmos criptográficos, sigo o modelo em este tutorial, e pode personalizá-los de acordo com as suas necessidades específicas.
Inicializar o PKI
Depois de ter preenchido o ficheiro
vars
você pode prosseguir com a criação do directório PKI. Para isso, execute o script easyrsa com a opção init-pki:$ ./easyrsa init-pkiDepois de ter iniciado o seu PKI no servidor OpenVPN, você está pronto para passar para o próximo passo, que é criar um pedido de certificado de servidor OpenVPN e chave privada.
4. Criar server.req`
e `x id="31"></x>`
#
Agora que o seu servidor OpenVPN tem todos os pré-requisitos instalados, o próximo passo é gerar um par de chaves composto de uma chave privada (para manter segredo), e um Certificado de Pedido de Assinatura (
.csr
) no seu servidor OpenVPN.Em termos gerais, em sistemas onde geramos uma chave e pedido, estes ficheiros são deixados por encriptar usando o argumento
nopass
, uma vez que os servidores normalmente precisam de arrancar sem a introdução de qualquer palavra-passe. Isto gera uma chave não criptografada, portanto tenha em mente proteger seu acesso e permissões de arquivo cuidadosamente.Dica
Notas de configuração do 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.
O certificado do servidor deve ter o seguinte:
keyUsage: digitalSignature, keyEncipherment`
extendedKeyUsage: serverAuth`
Criar o pedido de assinatura para o servidor
Navegue para o diretório
~/easyrsa
no seu servidor OpenVPN como seu usuário não-root, e digite os seguintes comandos:$ cd easyrsa/ $ ./easyrsa gen-req server nopassIsto irá criar uma chave privada para o servidor e um ficheiro de pedido de certificado chamado
server.req
.Uma vez que você tenha um certificado assinado, você o transferirá de volta para o servidor OpenVPN.
Copie a chave para o diretório do servidor OpenVPN
$ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/Após completar estes passos, você criou com sucesso uma chave privada para o seu servidor OpenVPN. Você também gerou um pedido de assinatura de certificado para o servidor OpenVPN.
Dica
Extensões de arquivo para pedidos de assinatura de certificado
A extensão de arquivo que é adotada pelo tutorial CA e HSM indica a criação de um arquivo
.csr
, porém o Easy-RSA cria pedidos de assinatura de certificado com uma extensão.req
.Usaremos intercambiavelmente ambas as extensões, enquanto nos certificamos de que transferimos os arquivos certos para a Autoridade Certificadora, e geramos um certificado final com uma extensão
.crt
.Na próxima seção deste guia, assinaremos um arquivo
.req
com nossa CA no dispositivo HSM 2. Para este fim, vou usar uma máquina dedicada para assinar os pedidos.
5. Assine e recupere server.crt`
#
As instruções seguintes requerem a transferência do arquivo
server.req`
(ouserver.csr
) para o sistema CA.A transferência em si não é sensível à segurança, embora seja aconselhável verificar se o arquivo recebido corresponde à cópia do remetente, se o transporte não é confiável.
Para passar por estes passos, vou confiar extensivamente em estas instruções, para assinar os pedidos de assinatura de certificado, uma vez que os geramos com Easy-RSA.
Sign the
server.req
fileNa máquina local dedicada a acessar o HSM, usaremos as ferramentas fornecidas pelo Opensc 0.20 para assinar o arquivo
.req
e enviá-lo de volta ao servidor OpenVPN. Nós assumimos que transferimos o arquivo da máquina do servidor para a máquina CA.Primeiro começamos por ligar o HSM Nitrokey, e introduza esta instrução para listar as chaves disponíveis.
Consultar a lista de dispositivos disponíveis
$ p11tool --list-all(Passo necessário) Se esta for a primeira vez que assina um certificado com a CA, poderá querer obter o URI da chave privada da CA a partir do HSM e incluí-lo no ficheiro de configuração.
Nota
O URI da chave deve estar neste 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=privateCriar
openvpn/
directório sob`x id="38"></x>`
$ mkdir/opt/certificate-authority/ $ cd /opt/certificate-authority/Assine o
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.crtRetrieve the
server.crt
file to the server machine
Transferir os certificados assinados para o servidor
Da máquina CA, copie os arquivos
server.crt`
echain.crt
para o servidor OpenVPN. Neste exemplo vamos usar o comandoscp
como se segue:$ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmpColocar os certificados no diretório do servidor
$ mv /tmp/{server.crt,chain.crt} /etc/openvpn/serverAviso
Certificado CA e
chain.crt`
No acima, o AC retorna o certificado de corte assinado, e inclui o certificado do AC
CA.crt
que é o`x id="117"></x>
arquivo. Isto pode ser feito através de um canal inseguro, embora o cliente seja encorajado a confirmar se ochain.crt
é válido, se o transporte não for confiável.É possível renomear o arquivo
chain.crt
arquivo paraCA.crt
na máquina alvo, no entanto usaremoschain.crt`
nas próximas instruções.
6. Configurar o servidor OpenVPN#
Uma ligação que utiliza TLS requer múltiplos certificados e chaves para autenticação. Agora que as emitimos e assinámos, podemos colocá-las nos directórios certos. A repartição dos certificados e chaves que devem ser localizados no directório raiz é a seguinte:
OpenVPN server - The root certificate file (CA.crt or chain.crt in our setup) - Server certificate - Server key - Diffie Hellman Parameters (optional)No seu servidor OpenVPN, agora você pode criar o arquivo de configuração
server.conf
com o seu editor de texto favorito. O ficheiro pode ser configurado de acordo com as suas necessidades, enquanto nos certificamos de alterar o certificado do servidor e as secções chave de acordo com os nomes que escolheu para os seus ficheiros que assinámos:# OpenVPN Server Certificate - CA, server key and certificate ca chain.crt cert server.crt key server.keyAqui está o arquivo de configuração que podemos usar para testar estas instruções:
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 testar se a configuração funciona corretamente, podemos usar este comando:
$ sudo openvpn --server --config server.conf
7. Iniciar o serviço OpenVPN no servidor#
Habilite o serviço OpenVPN adicionando-o ao systemctl, e inicie-o usando estes comandos:
$ sudo systemctl -f enable openvpn@server $ sudo systemctl start openvpn@serverPara verificar duas vezes se o serviço OpenVPN está ativo, use este comando:
$ sudo systemctl status openvpn@serverO OpenVPN deve estar a funcionar neste momento.
Configuração do lado do cliente#
1. Instalar OpenVPN e Easy-RSA#
Instalar o software
Podemos usar diretamente
dnf install
para instalar o OpenVPN 2.4.9 e o Easy-RSA 3.0.7$ sudo dnf install openvpn easy-rsaEntão criamos como não-root um diretório para Easy RSA chamado
Easy-RSA`
$ mkdir ~/easyrsaE ligue-o ao pacote Easy RSA que acabámos de instalar
$ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
2. Criar um PKI para o cliente OpenVPN#
Da mesma forma que criamos uma PKI no servidor OpenVPN, vamos criar uma PKI usando Easy-RSA no lado do cliente.
3. Crie um client.req`
e `x id="33"></x>`
#
Da mesma forma que emitimos o par de chaves no corte, geramos um par de chaves para o cliente que será composto pelo
client.req
arquivo e oclient.key
arquivo. Este último deve ser mantido em segredo na máquina do cliente.
4. Sinal client.req`
e emitir o ficheiro `x id="39"></x>
#
Para transferir o arquivo
client.req
para a máquina CA, usaremos o mesmo método que usamos para o arquivoserver.req
.Uma vez transferido, na máquina CA assinamos o arquivo de pedido de assinatura de certificado com 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. Importação client.crt`
na Nitrokey a partir da máquina CA#
Após criar o ficheiro
client.crt
, ligamos o dispositivo Nitrokey Pro 2 à máquina CA, e importamos o ficheiro.crt
para o dispositivo Pro 2 utilizando este comando:$ pkcs15-init --store-certificate client.crt --id 3Você pode ver se a chave está efetivamente armazenada na Nitrokey usando este comando:
$ pkcs15-tool -cOu, em alternativa
$ pkcs11-tool --list-objectsPara mais comandos pode consultar o wiki OpenSC.
6. Recupere o arquivo chain.crt
da 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 o cliente para interagir com a Nitrokey#
Agora de volta à máquina cliente, vamos ligar a Nitrokey Pro e usá-la para estabelecer a ligação VPN com o servidor. Em termos gerais, uma conexão que utiliza TLS requer múltiplos certificados e chaves para autenticação:
OpenVPN client - The root certificate file (`chain.crt`) - Client certificate - Client keyPara este guia, podemos fazer o seguinte
client.conf
ficheiro, e adicionar-lhe as opções necessárias em conformidade: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 o objeto correto
Cada fornecedor PKCS#11 pode suportar múltiplos dispositivos. Para visualizar a lista de objetos disponíveis, você pode usar o seguinte 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 de chaves certificado/privado tem um único
Serialized id`
string. A string de id serializada do certificado solicitado deve ser especificada, no arquivo de configuração. Podemos fazer isso adicionando a opçãopkcs11-id
usando aspas simples.pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'Adicionar a ID Serializada recuperada ao arquivo de configuração
Usando seu editor de texto favorito, abra o arquivo server.conf e adicione as seguintes linhas, tendo o cuidado de inserir seu próprio
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 autenticação adicional settings relacionados com OpenVPN autenticação, pode também adicionar algumas linhas para lidar com a gestão de chaves, embora seja opcional.
Nota
Clique para ver o 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 PINEtapa opcional
Se precisar de testar a configuração, com e sem a ficha na Nitrokey, pode adicionar linhas ao mesmo
client.conf
e comentar/descomentar as linhas relevantes de acordo com as suas necessidades:Nota
Clique para ver o código
# non_nitrokey login # cert client.crt # key client.key # tls-auth ta.key 1Configurar o cliente OpenVPN
O arquivo de configuração final
client.conf
deve ser parecido com este: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 estabelecer um aperto de mão, é necessário configurar o OpenSSL incluído no 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 ] SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocol = TLSv1.2 MinProtocol = TLSv1.2
With this modification, you will not have error as reported here, here and here
Problemas conhecidos
Existem algumas questões conhecidas relacionadas com o login no OpenVPN com OpenSC. Favor consultar estes assuntos aqui.
8. Iniciar o cliente OpenVPN#
Iniciar o serviço OpenVPN no cliente
Ative o serviço OpenVPN, e inicie-o usando estes comandos:
$ sudo systemctl -f enable openvpn-server@server.service $ sudo systemctl start openvpn-server@server.servicePara verificar duas vezes se o serviço OpenVPN está ativo, use este comando:
$ sudo systemctl status openvpn-server@server.serviceIntroduza o seu PIN de utilizador
Ao executar o cliente OpenVPN, é necessário introduzir o PIN da 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: ******Aviso
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)Em alguns casos relatados, não solicita um PIN no terminal. Uma alternativa seria usar este comando para fazer o login com o PIN:
$ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>Alternativamente, poderia recompilar OpenVPN cliente com suporte de sistema desactivado, e irá pedir-lhe o PIN como esperado.
Outra opção, seria fazer login na sua instância OpenVPN com o cliente Viscosity que proporciona uma melhor experiência ao usuário, especialmente para inserir o PIN.