OpenVPN: Revogar certificado

Esse tutorial demonstra de forma prática como revogar um certificado de um usuário no servidor OpenVPN. 

English version: Click Here

É muito comum, quando estamos lidando com VPNs empresariais, a saída de funcionários da empresa e que por consequência não deveriam mais ter acesso a VPN. Além disso, um usuário pode ter esquecido sua senha ou mesmo ter a private key exposta.  

Portanto, torna-se uma necessidade básica no dia a dia de uma empresa saber como revogar um certificado de forma correta e precisa. 

Nesse tutorial, estamos usando um servidor OpenVPN que está instalado em uma máquina Linux. Além disso, como prova de conceito, vamos usar um cliente OpenVPN com um usuário Alice. 

Além disso, estamos usando o mesmo cenário que usamos no artigo:

Instalar Open VPN em Linux

Revogando o certificado no OpenVPN 

O primeiro passo para revogar um certificado é entrar no diretório que contém o arquivo easyrsa. Em nossa instalação prévia do OpenVPN Server, o arquivo easyrsa está no diretório easy-rsa. Portanto, para acessá-lo vamos usar o comando abaixo. 

cd ~/easy-rsa/ 

Depois disso, vamos usar o comando easyrsa revoke para revogar o certificado do usuário Alice. Para isso vamos usar o comando abaixo. 

./easyrsa revoke Alice 

O sistema vai perguntar se deseja continuar e vamos digitar yes e depois pressionar ENTER

Gerando o CRL (certificate revocation list) 

Agora vamos gerar um CRL (certificate revocation list) para que a revogação do certificado da Alice tenha efeito. Ao usar o comando “./easyrsa gen-crl“  será criado um arquivo de lista de revogação de certificado chamado “crl.pem”

./easyrsa gen-crl 

Podemos ver que o arquivo crl.pem foi criado dentro do diretório “~/easy-rsa/pki/”. Se desejarmos verificar, podemos usar o comando abaixo para entrar no diretório e depois usar o comando “ls” para listar o conteúdo do diretório. 

Dessa forma, vamos ver que agora temos o arquivo de lista de revogação de certificado chamado “crl.pem”

cd ~/easy-rsa/pki/ 
ls 

Copiando o arquivo de CRL (certificate revocation list) 

Agora vamos copiar o arquivo CRL ( lista de certificado de revogação) “crl.pem” para o diretório de configuração do openvpn. Para isso, vamos usar o comando abaixo.  

sudo cp crl.pem /etc/openvpn/server/ 

Editando o arquivo de configuração do OpenVPN 

Agora, vamos editar o arquivo de configuração do servidor OpenVPN para identificar o arquivo de CRL (certificate revocation list). Para isso, vamos usar o comando abaixo para editar o arquivo “/etc/openvpn/server/server.conf” usando o editor de textos nano. 

sudo nano /etc/openvpn/server/server.conf 

Ao final do arquivo “server.conf”, vamos inserir uma linha que indica a verificação do CRL (certificate revocation list). Portanto, devemos copia a instrução abaixo e colar no final do arquivo de configuração server.conf. 

crl-verify crl.pem 

Reiniciando o servidor OpenVPN 

Agora vamos reiniciar o servidor OpenVPN para que as alterações tenham efeito. 

Para isso, vamos usar o comando abaixo. 

sudo systemctl restart [email protected] 

Testando o certificado OpenVPN revogado 

Agora vamos testar se o usuário ainda consegue usar o certificado revogado do OpenVPN. Para isso, vamos na máquina cliente e vamos tentar conectar na VPN com o usuário Alice. 

Em nosso caso, como estamos usando uma máquina Linux como cliente, usaremos o comando abaixo para fazer a conexão do usuário na VPN. 

sudo openvpn --config Alice.ovpn  

Podemos observar que o usuário Alice não conseguiu conectar na VPN e além disso, apareceram erros de “TLS key negotiation failed to occur” e também “TLS handshake failed”. Consequentemente, podemos verificar que depois de revogar o certificado do usuário Alice, esse usuário não consegue mais entrar na VPN. 

Minha opinião sobre VPNs e automatização 

Gosto muito de automatizar o processo de revogação de certificado. Isso porque no dia a dia devemos sempre tentar simplificar a vida dos responsáveis por inserir novos usuários na VPN e removê-los.  

Certa vez, me lembro de estar em uma empresa de computação que produzia softwares para dispositivos integrados em TVs. Em uma tarde de sexta feira, fomos informados que haveria uma fusão da empresa com outra empresa que até o momento era concorrente.

Nossa equipe, ficou encarregada de realizar a migração da base de usuários de modo que na segunda feira os impactos no trabalho fossem reduzidos. Nesse caso, tínhamos um desafio que era como atualizar os acessos dos usuários da empresa original e também adicionar usuários da empresa que estava se fundindo com a nossa.  

Inicialmente, tentamos realizar o procedimento de revogar certificados e criar usuários no OpenVPN de forma manual. No entanto, percebemos rapidamente que esse processo poderia levar mais tempo do que nos era delimitado. Foi então que um colega deu a ideia de criar shell script para revogar todos os certificados de VPN que precisavam ser atualizados e dentro do mesmo script criar novos certificados para a grande lista de funcionários que nos haviam entregado. 

Então, resolvemos seguir a ideia de nosso colega e passamos um tempo criando o script e validando. E para nossa surpresa, o script ficou pronto mais rápido do que o esperado e pudemos adicionar usuários a VPN e revogar certificados de forma ágil e reduzindo a probabilidade de erro humano. Dessa forma, um trabalho que era para ser entregue em 3 dias foi feito em apenas uma manhã de sábado.  

Esse foi somente um episódio de minha vida trabalhando com tecnologia da informação, espero que ajude. 

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer

Mais sobre OpenVPN

https://community.openvpn.net/openvpn