Remoção do certificado OpenVPN e conexão com nenhum arquivo de certificado no servidor

4

Eu me deparei com um problema, que eu removi os arquivos de certificado do servidor.

Mas o cliente que possui esses arquivos ainda pode se conectar.

Descobri que devo revogar o certificado e que isso pode ser feito alterando a linha com esse certificado em

/etc/openvpn/easy-rsa/keys/index.txt

para ter R, não V, como primeira linha de caracteres.

Mas anteriormente eu removi a linha para esse certificado do arquivo, porque a tentativa de gerar esse certificado novamente deu um arquivo de tamanho de 0 bytes.

Como eu li, ele não deve ser capaz de se conectar após a remoção de index.txt , mas ele se conecta.

O que pode causar o problema e como posso impedir que esse certificado específico se conecte?

Eu quero poder criar um certificado com o mesmo nome, CN e outros valores configurados para cada certificado, pois o que está sendo desativado - o certificado recém-criado deve ter a capacidade de se conectar.

EDITAR:

A solução estava desfazendo alterações em index.txt (alterando R de volta para V no certificado que eu queria revogar) e gerando CRL em easy-rsa , que estava faltando.
O index.txt não deve ser alterado manualmente da maneira que fiz, porque faltava a data de revogação e não permitia que eu gerasse a CRL ausente. Descobri que a revogação deve ser feita por /etc/openvpn/easy-rsa/revoke-full <cert name> , com todas as vars como quando o certificado foi gerado, no meu caso.

    
por tymik 28.01.2013 / 09:59

1 resposta

7

A resposta clara é não funciona porque você entendeu tudo errado .

Seu equívoco básico parece estar na ideia de que o OpenVPN e a Autoridade de Certificação têm um canal de comunicação para que o OpenVPN saiba automaticamente quais certificados você deseja permitir. Este não é o caso . O OpenVPN e a Autoridade de Certificação são entidades completamente separadas (mesmo que ambas residam no mesmo host) e não possuem nenhuma comunicação entre si.

A CA "assina" solicitações de certificação (basicamente, chaves públicas agrupadas com informações de identificação, como o nome do host), criptografando um hash da solicitação de certificação com sua própria chave privada. O que o OpenVPN faz é verificar se a) ele pode descriptografar o hash usando a chave pública da CA (que normalmente reside em um arquivo ca.crt em algum lugar) e verificar se o hash está correto para o certificado fornecido. Ele não requer nem usa conexões "ao vivo" para a CA para nada disso.

Você não pode revogar um certificado excluindo-o do diretório da CA (observe que, se você excluiu o certificado do cliente e foi sua única cópia, openssl ca não permitiria mais a revogação) ou a alteração do arquivo index.txt (este arquivo é apenas uma indicação para openssl ca sobre o estado dos certificados disponíveis). O que você precisa fazer é

  1. execute openssl ca -revoke <certificate file> para revogar o certificado no banco de dados interno OpenSSL CA (basicamente adicionando as informações de revogação no index.txt )
  2. crie uma lista de revogação de certificados usando openssl ca -gencrl -out ca.crl
  3. copie essa lista de revogação para o arquivo de lista de revogação do OpenVPN (consulte a diretiva crl-verify no arquivo de configuração do OpenVPN)
  4. veja o OpenVPN negar a conexão na próxima verificação de certificado

Se você estiver usando o conjunto de scripts de wrapper easy-rsa definido para OpenSSL CA , consulte o OpenVPN seção sobre revogação de certificados para uma documentação mais detalhada sobre como alcançar o acima usando os scripts easy-rsa. O procedimento básico é

# cd into the easy-rsa directory
cd <somewhere>/easy-rsa
# load your CA-related variables into the shell environment from the ./vars file
. ./vars
# run the revoke script for <clientcert.pem>
./revoke-full clientcert

você encontrará o crl.pem no diretório $KEY_DIR , conforme definido no arquivo ./vars .

    
por 28.01.2013 / 10:28