Pausar o acesso de um cliente e removê-lo para sempre parecem a mesma tarefa até você tentar desfazer uma das duas coisas. Revogar um certificado escreve um registo que o servidor trata como definitivo, e revertê-lo significa editar à mão a base de dados do emissor. Descartar o túnel ativo é um comando de gestão que não muda nada na confiança. Escolha a alavanca perguntando se a chave ainda é fiável, não perguntando quão urgente o pedido parece.

A crença: revogado e suspenso são a mesma coisa

Um subcontratado é pausado por uma semana e o reflexo é revogar, porque revogação soa a desligar algo. Parece arrumado, leva dez segundos, e deixa uma edição da base de dados como único caminho de volta. O reflexo é compreensível e está mais perto de queimar um passaporte do que de fechar uma porta. Um dispositivo pausado e uma chave comprometida precisam de tratamentos diferentes, e só um dos dois é barato de reverter.

A distinção é sobre a credencial e não sobre a pessoa. Uma chave que ainda está nas mãos certas pode ser pausada e retomada sem qualquer perda de confiança. Uma chave que pode ter sido copiada nunca deve ser restaurada, porque restaurar afirma que a cópia não existe.

Escreva a resposta antes de tocar em qualquer um dos dois sistemas. Se não consegue dizer se a chave está exposta, a resposta conservadora é a substituição.

Descarte a sessão ativa com a interface de gestão

OpenVPN expõe uma interface de gestão que pode listar sessões e matar uma delas pelo nome comum. Ative-a em localhost, mantenha-a longe da interface pública, e envie o comando de matar quando uma sessão tiver de desaparecer já. O comando fecha apenas esse túnel, e todos os outros clientes continuam a funcionar.

Isto é uma resposta a um problema ativo, não uma política de suspensão. O mesmo perfil pode voltar a ligar-se num minuto, porque nada na sua credencial mudou. Use-a quando a sessão tem de sair e a decisão duradoura ainda está a ser tomada.

Confirme que a sessão estava ligada antes de a matar, para não andar à caça de um cliente que nunca se ligou. O comando de estado abaixo imprime o que está ligado neste momento.

printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506

Se o comando de matar informar que não existe tal cliente, o nome comum no certificado não é a cadeia que escreveu. Leia a saída de estado em vez do nome do ficheiro de perfil.

O que a CRL controla realmente

O servidor não consulta um sinalizador de revogação guardado no certificado. Lê a lista de revogação de certificados indicada em crl-verify, em cada nova ligação, e rejeita um certificado cujo número de série conste dessa lista. Daí decorrem duas consequências, e ambas importam operacionalmente. O ficheiro tem de ser legível pela conta para a qual o servidor baixa privilégios, e um cliente já ligado continua a funcionar até se voltar a ligar.

Essa segunda consequência surpreende as pessoas durante incidentes. Revogar um certificado não fecha o túnel que o está a usar neste momento. Combine a revogação com uma morte de gestão se a sessão tiver de terminar de imediato, e trate as duas ações como passos separados do manual.

Inspecione a lista para ver o que o servidor vai realmente aplicar, em vez de confiar na marca temporal do último ficheiro que copiou. A contagem de séries é a parte que importa.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pem

Uma lista sem entradas e uma lista com as entradas corretas parecem idênticas numa listagem de diretório, por isso vale a pena imprimir a contagem de séries. A linha de permissões importa tanto como isso, porque um ficheiro que o daemon não consegue ler produz uma falha que parece um cliente rejeitado.

Restaurar um registo, com cuidado

Restaurar um certificado significa inverter um registo na base de dados de emissão e publicar uma lista nova. O easy-rsa 3 guarda essa base como index.txt dentro do diretório PKI, enquanto as disposições mais antigas usavam outra organização. Uma linha começa com uma letra de estado e uma data de expiração. Uma linha revogada insere uma marca temporal para a revogação antes de continuar com o número de série, o nome do ficheiro do certificado e o nome distinto. Repor uma linha significa apagar essa marca temporal e inverter a letra, deixando todo o resto em paz.

Faça primeiro uma cópia de segurança do ficheiro, e escreva a edição como script em vez de a escrever num editor de texto. Uma gralha que altera quantos campos uma linha tem estraga a emissão de cada certificado acrescentado depois. É essa a razão para automatizar a alteração e copiar o ficheiro antes de lhe tocar.

Uma segunda revogação do mesmo nome também falha muitas vezes, porque a primeira execução moveu esse certificado e a sua chave para fora dos diretórios onde a ferramenta espera encontrá-los. A ferramenta já não encontra o que lhe foi pedido para revogar, e a mensagem de erro nem sempre explica porquê.

cp /etc/easy-rsa/pki/index.txt /root/index.txt.$(date +%F-%H%M)
grep -c '^R' /etc/easy-rsa/pki/index.txt
easyrsa gen-crl

Publique a lista nova, corrija a sua propriedade e faça com que o servidor a leia. Um recarregamento basta na maioria das instalações, mas a confirmação tem de vir de uma ligação nova, já que a sessão existente nunca voltou a verificar nada.

Verifique qual alavanca o caso merece

Faça a pergunta que decide todo o manual: a chave privada ainda está apenas onde deve estar. Se estiver, a morte da sessão mais uma pausa documentada cobre o caso e não deixa qualquer registo permanente. Se não estiver, a única resposta segura é uma chave nova com o certificado antigo deixado como revogado.

Depois verifique o resultado com uma tentativa de ligação e não com uma diferença de configuração. A diferença diz-lhe o que pretendia, e a ligação diz-lhe o que o servidor aplica.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506

Quando um cliente restaurado se liga e aparece na saída de estado, a edição do registo funcionou. Quando um cliente revogado é recusado e o registo nomeia a CRL, a revogação funcionou. Qualquer coisa pelo meio é um problema de permissões ou de recarregamento, e vale a pena corrigi-lo antes de chegar o pedido seguinte.

Artigos relacionados