3GNTW :: Knowledgebase

Como gerar certificados para os clientes OpenVPN ?

Article ID: 24
Last updated: 20 Mar, 2024

Nota importante:

O procedimento abaixo aplica-se em servidores OpenVPN "modernos", executados sobre a distribuição Rocky Linux. Para obter um procedimento apropriado para distribuições mais antigas contacte a 3GNTW.


Os certificados OpenVPN devem ser emitidos, assinados e instalados no servidor que executa o servidor OpenVPN, (ou no 1º nodo de um "cluster", quando em regime de alta disponibilidade).

A gestão do servidor OpenVPN e dos certificados é realizada dentro da pasta "/etc/openvpn/":

  • Na pasta "/etc/openvpn/easy-rsa/" encontram-se as ferramentas para emissão e assinatura dos certificados, quer para os utilizadores, quer para o próprio servidor;
  • Na pasta  "/etc/openvpn/server/rsa-keys/" residem os certificados do servidor, assim como os certificados gerados para os clientes.


Certifique-se que tem acesso à referida máquina através da consola, ou através de um cliente SSH.

Altere a sua pasta de trabalho para "/etc/openvpn/easy-rsa/" com o seguinte comando:

cd /etc/openvpn/easy-rsa/

De seguida execute um dos comandos abaixo.

  1. Se deseja gerar um pedido de certificado OpenVPN para utilização por parte de um utilizador normal, deve protegê-lo através de uma palavra-chave, (de forma a não ser possível o acesso à sua organização, mesmo que o certificado OpenVPN fique na posse de entidades não autorizadas). Execute o comando "./easyrsa gen-req endereço@domínio.tld", em que endereço@domínio.tld é o nome a atribuir ao certificado, sem espaços. Normalmente usa-se o endereço de correio do utilizador para quem o certificado se destina. Um exemplo:
[root@servidor easy-rsa]# ./easyrsa gen-req utilizador@dominio.tld

Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

IMPORTANT:
  The preferred location for 'vars' is within the PKI folder.
  To silence this message move your 'vars' file to your PKI
  or declare your 'vars' file with option: --vars=<FILE>

Using SSL:
* openssl OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [utilizador@dominio.tld]:

Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/easy-rsa/pki/reqs/utilizador@dominio.tld.req
* key: /etc/openvpn/easy-rsa/pki/private/utilizador@dominio.tld.key

[root@servidor easy-rsa]#
  1. Se deseja gerar um pedido de certificado OpenVPN para utilização por parte de um dispositivo que estabelece a ligação VPN automaticamente, sem intervenção humana, nesse caso a sua utilização não deve exigir a introdução de uma palavra-chave. Execute o comando "./easyrsa gen-req dispositivo nopass", em que dispositivo deve ser um nome descritivo para o dispositivo onde o certificado OpenVPN será instalado, mas sem espaços. Um exemplo:
[root@servidor easy-rsa]# ./easyrsa gen-req testes2 nopass
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

IMPORTANT:
  The preferred location for 'vars' is within the PKI folder.
  To silence this message move your 'vars' file to your PKI
  or declare your 'vars' file with option: --vars=<FILE>

Using SSL:
* openssl OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [testes2]:

Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/easy-rsa/pki/reqs/testes2.req
* key: /etc/openvpn/easy-rsa/pki/private/testes2.key

[root@servidor easy-rsa]#


Será questionado sobre vários parâmetros do certificado. Geralmente são feitas sugestões, dentro de parênteses rectos.

Quando o valor sugerido está correcto, basta teclar "Enter" para o aceitar e passar à questão seguinte. Os principais campos a ter em conta são a palavra-chave do certificado, (que pode ser alterada mais tarde, através do cliente OpenVPN), e o "Common Name", que deverá aparecer preenchido com o mesmo endereço de correio ou nome do dispositivo que indicou no passo anterior.

Os pedidos de certificados são arquivados na pasta "/etc/openvpn/easy-rsa/pki/reqs/", e as respectivas chaves privadas são arquivadas em "/etc/openvpn/easy-rsa/pki/private/".


De seguida é necessário "assinar" o pedido de certificado OpenVPN, operação efectuada com o comando "./easyrsa sign-req client endereço@domínio.tld", ou "./easyrsa sign-req client dispositivo", como se demonstra:

[root@servidor easy-rsa]# ./easyrsa sign-req client utilizador@dominio.tld
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/easy-rsa/vars

IMPORTANT:
  The preferred location for 'vars' is within the PKI folder.
  To silence this message move your 'vars' file to your PKI
  or declare your 'vars' file with option: --vars=<FILE>

Using SSL:
* openssl OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
You are about to sign the following certificate:
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a client certificate
for '825' days:

subject=
    commonName                = utilizador@dominio.tld

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Using configuration from /etc/openvpn/easy-rsa/pki/openssl-easyrsa.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'utilizador@dominio.tld'
Certificate is to be certified until Jun  9 18:14:08 2026 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Notice
------
Certificate created at:
* /etc/openvpn/easy-rsa/pki/issued/utilizador@dominio.tld.crt

[root@servidor easy-rsa]#

O certificado foi gerado e arquivado na pasta "/etc/openvpn/easy-rsa/pki/issued/".

Para que o servidor OpenVPN o reconheça, e aceite, deve ser colocado na pasta "/etc/openvpn/server/rsa-keys/", juntamente com a respectiva chave privada, da seguinte forma:

[root@servidor easy-rsa]# cp pki/issued/utilizador\@dominio.tld.crt pki/private/utilizador\@dominio.tld.key /etc/openvpn/server/rsa-keys/
[root@servidor easy-rsa]#

Deve criar um pacote ZIP com tudo o que o cliente OpenVPN necessita para ser correctamente configurado: o certificado do utilizador ou dispositivo, a respectiva chave privada, o certificado da CA - Certificate Authority que assinou o certificado, um ficheiro de configuração para o cliente OpenVPN, e material criptográfico para a criação de ligações seguras. Pode fazê-lo com o comando ""

[root@servidor easy-rsa]# /root/tools/build-crt-pkg.sh utilizador@dominio.tld
Configuracoes:
	1) /etc/openvpn/server/dtway.ovpn
A tua configuracao e: /etc/openvpn/server/dtway.ovpn
  adding: utilizador@dominio.tld.crt (deflated 45%)
  adding: utilizador@dominio.tld.key (deflated 23%)
  adding: dtway.ovpn (deflated 54%)
  adding: ca.crt (deflated 28%)
  adding: ta.key (deflated 39%)
Ficheiro zip[utilizador@dominio.tld]: /etc/openvpn/server/rsa-keys/utilizador@dominio.tld.zip
[root@servidor easy-rsa]#


Em ambientes de alta disponibilidade, deve sincronizar a base de dados de certificados e chaves privadas para o 2º nodo do "cluster", com o comando "/root/tools/cluster-sync/openvpn.sh".


Deverá agora utilizar um programa para transferência de ficheiros, usando os protocolos SSH ou SFTP, como por exemplo o WinSCP, para transferir o pacote ZIP criado no ponto anterior, e transferi-lo para o utilizador ou dispositivo que irá executar o cliente OpenVPN.

Veja nos artigos relacionados, abaixo, como instalar e configurar um cliente OpenVPN.

This article was:   Helpful | Not helpful
Report an issue
Article ID: 24
Last updated: 20 Mar, 2024
Revision: 1
Views: 0
Comments: 0
Posted: 18 Dec, 2019 by Silva J.
Updated: 20 Mar, 2024 by Araújo S.
Tags

Also read