A revogação nunca entra num túnel em execução para apagar uma sessão. A lista é uma entrada da verificação do certificado e é consultada durante a troca do canal de controlo que inicia uma sessão TLS. Esse único facto explica as duas surpresas: um cliente revogado volta a conectar porque a lista nunca chegou ao verificador, e uma sessão existente sobrevive porque ninguém verificou nada de novo.

Uma lista é uma entrada, não uma ação

Durante o estabelecimento da sessão o servidor valida o certificado do cliente contra as suas âncoras de confiança, e a diretiva de revogação acrescenta a essa decisão uma consulta da lista. A verificação ocorre no servidor, por isso o cliente não pode ver que o seu certificado foi revogado e continua a oferecer o mesmo. Um perfil que ainda se conecta demonstra apenas que algum verificador aceitou a cadeia, não que a revogação falhou.

A lista é ela própria um objeto assinado com uma data de emissão e uma data de próxima atualização. Uma lista alheia, uma assinada por outra autoridade ou uma cuja próxima atualização já passou não substituem a atual, e o rejeitar ou aceitar em silêncio de uma lista desatualizada depende da implementação.

Conexão nova versus sessão em curso

A revogação é avaliada quando uma sessão é estabelecida ou renegociada, não contra o canal de dados em cada pacote. Um cliente já ligado detém chaves de tráfego, por isso continua a deixar passar pacotes depois de o seu certificado aparecer na lista. O intervalo de renegociação predefinido mede-se em horas, e é por isso que uma lista atualizada pode vigorar para os recém-chegados enquanto um túnel em execução se mantém.

SituationWhat the list doesWhen it applies
Fresh connectionBlocks the handshakeAt verification, immediately
RenegotiationBlocks the new exchangeAt the next renegotiation interval
Established data channelNothingUntil the session ends

A aplicação imediata exige uma ação deliberada e não apenas a lista. Reiniciar o serviço obriga cada cliente a reconectar, enquanto terminar uma só sessão pela interface de gestão deixa as outras intactas. Escolha uma por incidente e registe qual usou. As duas opções têm um raio de impacto diferente, e essa é a decisão real.

Entregue o ficheiro que o verificador lê de facto

A lista tem de ser gerada a partir do registo da autoridade e depois copiada para cada máquina que verifica certificados. Gerá-la no host da CA e nunca a instalar no servidor é a falha mais comum, e parece exatamente uma funcionalidade de revogação avariada.

ca ca.crt
cert server.crt
key server.key
crl-verify /etc/openvpn/crl.pem

Dois detalhes decidem se o ficheiro é realmente lido. Um caminho relativo é resolvido em relação ao diretório de configuração, por isso uma cópia deixada na pasta pessoal de um operador pode nunca ser encontrada. E o daemon costuma abandonar os privilégios após o arranque, por isso a conta de execução precisa de permissão de pesquisa em cada diretório ascendente e de permissão de leitura no ficheiro. Verifique ambos com a conta de execução e não com root, ou o teste prova a coisa errada.

Em hosts systemd uma unidade endurecida também pode ocultar o caminho, com uma vista só de leitura ou um diretório de sistema protegido. De dentro do serviço isso é indistinguível de um ficheiro ausente, por isso reveja as restrições da unidade antes de ir procurar um erro de permissões. Leia o ficheiro da unidade antes de culpar o modo do ficheiro.

Confirme no servidor, não no cliente

O registo do servidor nomeia o que aconteceu: abrir a lista, carregá-la ou falhar a verificação com o número de série revogado. O cliente apenas relata uma falha genérica de handshake, e por isso os registos do cliente são um mau lugar para procurar uma decisão de revogação.

Verifique com uma tentativa nova a partir do perfil revogado e depois pare. Uma ligação bem-sucedida a partir desse perfil é o sinal para inspecionar o caminho do ficheiro e a conta de execução, não para supor que a lista estava errada. Guarde essa tentativa bem-sucedida como teste de aceitação, e não conte uma reconexão que não observou.

O que não revoga nada

Apagar o perfil de um portátil, remover o ficheiro do certificado do cliente ou dizer ao utilizador para deixar de se ligar não muda nada no servidor. O certificado continua válido até a autoridade registar a revogação e o verificador ler a lista resultante.

É também por isso que vale a pena escrever a cadeia: registe a revogação, gere e assine a lista, distribua exatamente esse ficheiro e confirme que a conta do serviço o consegue ler. Cada elo é curto, e qualquer um em falta deixa um cliente revogado a ligar-se alegremente. Uma lista de verificação de quatro linhas vale mais do que uma suposição sem nenhuma.

Artigos relacionados