Cliente revogado ainda se conecta: a lista nunca chegou
A revogação é uma entrada da verificação do certificado, não um comando que encerra uma sessão. Compare como uma conexão nova e um túnel em execução veem a lista.
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.
| Situation | What the list does | When it applies |
|---|---|---|
| Fresh connection | Blocks the handshake | At verification, immediately |
| Renegotiation | Blocks the new exchange | At the next renegotiation interval |
| Established data channel | Nothing | Until 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.