quarta-feira, 2 de fevereiro de 2011

Revogando certificados e bloqueando clientes no OpenVPN

Revogar Certificados

Revogar um certificado significa invalidar um certificado assinado previamente para que ele não possa mais ser usado para autenticação.

Razões típicas para querer revogar um certificado:

-A chave privada associada ao certificado foi comprometida ou roubada.
-O usuário da chave privada criptografada esqueceu a senha da chave.
-Você deseja cancelar o acesso de um usuário a VPN.

Exemplo

Como exemplo, vamos revogar o certificado client2.

Primeiro abra um shell e vá para o diretório easy-rsa:

Execute

./vars
./revoke-full client2

Você verá uma saída semelhante a esta:

Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate 04.
Data Base Updated
Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
client2.crt: /C=KG/ST=NA/O=OpenVPN-TEST/CN=client2/emailAddress=me@myhost.mydomain
error 23 at 0 depth lookup:certificate revoked

A mensagem "error 23" indica que o certificado foi revogado com sucesso, ela não é exatamente uma mensagem de erro e sim uma confirmação.

O script revoke-full irá gerar um arquivo chamado crl.pem (CRL - Lista de Certificados Revogados) no subdiretório keys. O arquivo deve ser copiado para um diretório onde o servidor OpenVPN possa acessá-lo, em seguida, a verificação da CRL deve ser ativada na configuração do servidor:

crl-verify crl.pem

Reinicie sua VPN e todos os certificados revogados serão recusados no handshake do cliente.

Esse texto acima é uma tradução de Revoking Certificates

Minhas Considerações.

Caso você siga os passos a cima e tudo funcione, parabéns. Porém, caso ocorra um dos erros:

revoke-full[39]: ca: not found
cat: crl.pem: No such file or directory

Esse erro ocorre porque no script revoke-full original da maioria das versões do OpenVPN não tem declarada a variável $OPENSSL. Adicione a mesma ao script:

OPENSSL='/usr/sbin/openssl'

Até mesmo na comunidade oficial do projeto openvpn o exemplo do revoke-full não tem essa variável declarada.

Dúvidas? Postem ou envie um e-mail.

Abraços e até a próxima.

Nenhum comentário:

Postar um comentário