Você sabe o que é OpenVPN e Easy-RSA? Antes de começarmos ver como usá-los, vamos falar brevemente sobre cada um deles.
OpenVPN é um software de código aberto que permite criar uma conexão segura e criptografada entre dispositivos, proporcionando uma VPN (Rede Virtual Privada) para proteger a privacidade e segurança dos dados transmitidos.
Easy-RSA é uma ferramenta de software que simplifica a criação e gerenciamento de certificados de segurança usados em sistemas de VPN, como o OpenVPN. Ele fornece uma interface fácil de usar para gerar, revogar e renovar certificados digitais.
E o que é VPN? Veja esse artigo a respeito: O que É uma VPN e Quando Usar?
Mas vamos falar um pouco também sobre o que é VPN.
VPN (Rede Virtual Privada) é uma tecnologia que permite estabelecer uma conexão segura e criptografada entre dispositivos através de uma rede pública, como a Internet. Ela ajuda a proteger a privacidade e segurança dos dados transmitidos, criando um túnel virtual que impede que terceiros interceptem ou acessem as informações.
Sobre Easy-RSA para Criar as Chaves para o OpenVPN
Easy-RSA é uma ferramenta de software utilizada para criar as chaves e certificados. Poderíamos usar o OpenSSL para criar as chaves. Embora seja possível usar o OpenSSL para gerar essas chaves necessárias para o OpenVPN, será mais trabalhoso e complicado e exigirá mais conhecimento técnico. O uso do Easy-RSA simplifica esse processo, oferecendo uma interface amigável e automatizada para a criação de chaves e certificados de forma mais conveniente.
O OpenVPN cria uma VPN e uma VPN necessita de chaves criptogáficas para a conexão segura para funcionar e conceder segurança.
O Easy-RSA fornece uma interface simples para gerar, revogar e gerenciar certificados digitais. Com o Easy-RSA, é possível criar chaves de criptografia, certificados de servidor e clientes, garantindo a autenticação e a segurança dos dispositivos envolvidos na rede virtual privada.
Saiba que a melhor maneira de criar uma PKI para OpenVPN é separar o servidor CA, manter um dedicado. Assim ficando isolado de cada servidor e cliente. Idealmente, a CA deve estar em um ambiente seguro(o que quer que isso signifique para você). A perda/roubo da chave da CA destrói a segurança de toda a PKI. Aqui, faremos do modo recomendado: existirá um servidor apenas como CA.
Veja: O que É uma CA(Autoridade Certificadora)?
Nesse “modo certo”, a geração de todos os pares de chaves(request) deve ocorrer no sistema de destino que os utilizará; Em outras palavras, gere uma solicitação de servidor no sistema de servidor real e suas solicitações de cliente em cada cliente.
Terminaremos com os seguintes locais usados nas etapas abaixo:
- CA: seu ambiente de CA seguro; isso estará em um sistema separado ou, pelo menos, em um diretório separado de qualquer outra coisa
- servidor: cada servidor possui um diretório exclusivo para sua própria chave e solicitação (no sistema do servidor real)
- entidade: cada cliente tem um diretório exclusivo para sua própria chave e solicitação (no sistema do cliente real)
Etapas que Seguiremos
Aqui faremos,
- Configurar uma CA PKI e crie uma CA raiz
- Configurar ambientes PKI secundários nos servidores e nos clientes e gerar um par de chaves de solicitação
- Enviar essas solicitações de certificado para a CA, onde a CA assina e retorna um certificado válido
- Em nosso servidor OpenVPN, gerar parâmetros DH
Baixando e Configurando o Easy-RSA v3 no Servidor CA
Iremos precisar dos programas unzip e wget. Pode instalá-los, por exemplo,
se estiver usando Debian ou derivados
sudo apt install wget unzip -y
ou, se estiver usando Red Hat ou derivados
sudo dnf install wget unzip -y
#1 Crie uma pasta onde deixaremos o easy-rsa v3,
maria@debian11VM:~$ sudo mkdir /easy-rsa3
#2 Acesse a pasta e faça download do easy rsa 3
maria@debian11VM:~$ cd /easy-rsa3/
#3 clique no botão verde escrito code na página do github em https://github.com/OpenVPN/easy-rsa, clique com direito do mouse em Download ZIP e copie o link do arquivo, use wget para baixar.
Execute sudo wget -c https://github.com/OpenVPN/easy-rsa/archive/refs/heads/master.zip -O easyrsa3
maria@debian11VM:/easy-rsa3$ sudo wget -c https://github.com/OpenVPN/easy-rsa/archive/refs/heads/master.zip -O easyrsa3.zip
Acima, usamos wget com “-c” para continuar o download em caso de falha e “-O” para dar um novo nome ao arquivo. Veja: Como Baixar Arquivo com WGET Dando um Novo Nome?
#4 Extraia o conteúdo executando sudo unzip easyrsa3.zip
maria@debian11VM:/easy-rsa3$ sudo unzip easyrsa3.zip
Será gerada a pasta easy-rsa-master. Acesse ela, e dentro dela, acesse a subpasta easyrsa3
maria@debian11VM:/easy-rsa3$ cd easy-rsa-master/easyrsa3/
Se você estiver usando o Windows, abra uma janela do Prompt de Comando e clique em \Arquivos de Programas\OpenVPN\easy-rsa.
#5 tire uma cópia do arquivo vars.example e adicione permissão para execução(chmod +x)
maria@debian11VM:/easy-rsa3/easy-rsa-master/easyrsa3$ sudo cp vars.example vars
maria@debian11VM:/easy-rsa3/easy-rsa-master/easyrsa3$ sudo chmod +x vars
#6 abra o arquivo vars com seu editor(nano, vim…) e retire o # das seguintes linhas e altere-as conforme seu desejo
Obs.: vars pode ser chamado o vars.bat no Windows
set_var EASYRSA_REQ_COUNTRY "BR" set_var EASYRSA_REQ_PROVINCE "Sao Paulo" set_var EASYRSA_REQ_CITY "Sao Paulo" set_var EASYRSA_REQ_ORG "Categoriao Outros" set_var EASYRSA_REQ_EMAIL "maria@categoriaouros.com.br" set_var EASYRSA_REQ_OU "Categoria Outros"
Salve e saia da edição.
Configurando a CA, O Serveridor e o Cliente no OpenVPN
#1 Na CA, inicie uma nova PKI e crie um par de chaves/certificado de CA:
./easyrsa init-pki ./easyrsa build-ca
#2 Em cada sistema de servidor, gere um par de chaves e um arquivo de solicitação(request). Normalmente, eles não são criptografados usando o argumento “nopass”, pois os servidores geralmente iniciam sem nenhuma senha. Isso gera uma chave não criptografada, portanto, proteja seu acesso e permissões de arquivo com cuidado.
./easyrsa init-pki ./easyrsa gen-req NOME_CURTO_UNICO_DE_SERVIDOR nopass
#3 Em cada cliente, gere um par de chaves e uma solicitação(request). O nome selecionado deve ser exclusivo na PKI e, caso contrário, é arbitrário. Crie uma nova PKI e solicite em cada cliente da seguinte maneira:
./easyrsa init-pki ./easyrsa gen-req NOME_CURTO_UNICO_DE_CLIENTE
Opcionalmente, a chave privada pode ser deixada sem criptografia no disco com a opção adicional nopass após o nome. Isso não é recomendado, a menos que a inicialização automática da VPN seja necessária. As chaves privadas não criptografadas podem ser usadas por qualquer pessoa que obtenha uma cópia do arquivo. As chaves criptografadas oferecem proteção mais forte, mas exigirão a senha no uso inicial.
#4 Envie os arquivos de solicitação(request) de cada entidade para o sistema CA. Isso 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 for confiável.
#5 Na CA, importe cada arquivo de solicitação de entidade, dando a ele um “nome curto” arbitrário, conforme a seguir. Isso, basicamente, apenas copia o arquivo de solicitação em reqs/ no diretório PKI para prepará-lo para revisão e assinatura.
./easyrsa import-req /caminho/para/recebido.req NOME_CURTO_UNICO_DE_ARQUIVO
#6 Revise os detalhes de cada solicitação(request), se desejar, e assine-a como um dos tipos: servidor ou cliente.
Se quiser ver detalhes
./easyrsa show-req NOME_CURTO_UNICO_DE_ARQUIVO
para assinar para cliente
./easyrsa sign-req client NOME_CURTO_UNICO_DE_ARQUIVO
para assinar para um servidor
./easyrsa sign-req server NOME_CURTO_UNICO_DE_ARQUIVO
#7 A CA retorna o certificado assinado produzido na etapa acima e inclui o certificado CA (ca.crt), a menos que o cliente já o tenha. Isso pode ser feito em um canal inseguro, embora o cliente seja encorajado a confirmar que o certificado CA recebido é válido se o transporte não for confiável.
Geração DH
No PKI para o servidor OpenVPN, este comando irá gerar os parâmetros DH usados durante o handshake TLS com os clientes conectados. Os parâmetros DH não são sensíveis à segurança e são usados apenas por um servidor OpenVPN.
./easyrsa gen-dh
Procedimento PKI: Produzindo seu PKI completo na máquina CA
É comum para iniciantes produzir uma PKI completa em uma máquina e depois distribuir os arquivos conforme necessário. Se você seguiu as etapas acima e já possui uma PKI parcial, certifique-se de não substituí-la. A maneira mais simples é fazer uma cópia completa do Easyrsa3 em uma nova pasta.
Começando com uma nova cópia do Easyrsa3, siga estas etapas:
Copie o arquivo vars.example como outro arquivo chamado de apenas vars e abra vars para edição com seu editor nano ou vim ou ainda outro que desejar. Leia vars para obter instruções sobre o que editar. Por exemplo, você pode escolher se sua PKI usará criptografia RSA ou curva elíptica. Salve suas alterações e feche vars.
Inicialize seu PKI:
./easyrsa init-pki
Crie sua AC:
./easyrsa build-ca
A opção nopass
pode ser usada para desabilitar o bloqueio de senha da CA.
Crie um certificado e uma chave de servidor:
./easyrsa build-server-full <SERVER_NAME>
Substitua <SERVER_NAME>
pelo nome do seu servidor. por exemplo, Server-01
. A opção nopass
pode ser usada para desabilitar o bloqueio de senha da chave.
Crie um certificado e uma chave de cliente:
./easyrsa build-client-full <CLIENT_NAME>
Substitua <CLIENT_NAME>
pelo nome do seu cliente. por exemplo. Client-01
ou alice
. A opção nopass
pode ser usada para desabilitar o bloqueio de senha da chave. Repita para todos os clientes.
Usando esse método, as chaves do servidor e do cliente devem ser distribuídas em uma mídia segura, como o uso de SFTP.
Por fim, você pode usar o Easy -TLS para adicionar os toques finais ao seu PKI.
Baixe easytls
para seu diretório de trabalho atual do EasyRSA-3 e siga estas etapas:
Inicialize o Easy-TLS:
./easytls init-tls
Isso cria um diretório chamado easytls
em seu diretório PKI atual (Padrão: pki/easytls
)
Crie uma chave TLS-AUTH:
./easytls build-tls-auth
Crie uma chave TLS-CRYPT:
./easytls build-tls-crypt
Crie uma chave de servidor TLS-CRYPT-V2:
./easytls build-tls-crypt-v2-server <SERVER_NAME>
Esta chave deve ser mantida em segurança.
Crie uma chave de cliente TLS-CRYPT-V2:
./easytls build-tls-crypt-v2-client <SERVER_NAME> <CLIENT_NAME>
A chave do servidor é usada para criptografar a chave do cliente e é por isso que a chave do servidor também deve ser especificada.
Agora o Easy-TLS pode criar arquivos .inline
para cada um dos seus nós VPN.
Dependendo do tipo de chave TLS que você está usando (TLS auth, crypt ou crypt-v2), crie um arquivo embutido:
./easytls inline-tls-auth Server-01
Repita para todos os seus nós VPN.
Se você usou o primeiro método para criar seu PKI e não tem acesso às chaves de cada um de seus nós, ainda pode usar o Easy-TLS para criar arquivos .inline
usando a opção nokey
. Isso criará arquivos .inline
que deixarão o campo <key></key>
em branco para que a chave possa ser colada pelo respectivo usuário.
Este artigo é baseado na página wiki oficial da comunidade do OpenVPN.
Comment on “Como Usar Easy-RSA v3 para o OpenVPN?”