O seu cliente VPN está desinstalado, o perfil desapareceu das Definições e o túnel continua a subir com as credenciais antigas. Ou elimina-o, reinicia e encontra-o de volta na manhã seguinte. Nenhuma destas situações é um botão de eliminar avariado. Um perfil é configuração; um certificado é material de chave mais uma decisão de confiança registada num armazenamento para o qual o perfil apenas aponta. Qual dos dois tem em mãos decide o que 'remover' tem de significar.

Um perfil não é um certificado

Numa configuração VPN, três objetos diferentes são chamados 'o certificado'. A identidade do cliente é um certificado folha com uma chave privada, e o gateway usa-o para decidir quem é. O certificado folha do próprio servidor e o seu intermédio são o que o seu cliente verifica ao ligar-se. A âncora de confiança, normalmente um certificado de raiz ou de CA privada, é o que torna a cadeia verificável. RFC 5280 chama a estes a âncora de confiança, o intermédio e a entidade final, e a cadeia só é válida enquanto cada elo assinar o elo abaixo.

Elimine a identidade e um dispositivo perde o acesso. Elimine a âncora e todas as aplicações que validam contra esse armazenamento perdem a capacidade de verificar qualquer coisa emitida sob ele, incluindo ligações que nada têm a ver com a VPN. Essa assimetria é todo o risco aqui: uma raiz instalada para um gateway é muitas vezes a mesma raiz que assina um portal interno, um servidor de correio ou um espelho de pacotes. Lembre-se de qual dos dois tem em mãos.

A propriedade decide se a eliminação fica eliminada. Num portátil que possui, é o único que pode repor o certificado. Num dispositivo gerido, um perfil de configuração ou um payload MDM pode reinstalá-lo no próximo check-in, e é por isso que 'volta' e por isso eliminar com mais força não ajuda.

Descubra qual armazenamento ainda o guarda

As pessoas começam na aplicação Definições, que é o único sítio onde um certificado não é guardado. Os locais reais são os armazenamentos de confiança do sistema, o armazenamento próprio do browser e o armazenamento privado da aplicação.

StoreWhat deleting from it affects
Windows CurrentUser\Myyour login session only
Windows LocalMachine Rootevery user and service on the machine
macOS login or System keychainone account, or all of them with sudo
Linux ca-certificates bundlecurl, git, Python, anything using the system bundle
Firefox cert9.dbFirefox only; it does not read the OS store

Compare pelo número de série ou pela impressão digital, nunca pelo nome apresentado. Os nomes apresentados são definidos por quem emitiu o certificado e são reutilizados: 'Example VPN' pode ser três certificados com três chaves diferentes, um deles ainda em uso diário.

certutil -user -store My
certutil -store Root
openssl x509 -in vpn-client.pem -noout -subject -issuer -serial -fingerprint -sha256

No macOS, a ferramenta security dá os mesmos factos, e find-identity mostra que certificados ainda têm uma chave privada associada:

security find-certificate -a -c "Example VPN" -Z /Library/Keychains/System.keychain
security find-identity -v -p ssl-client

Elimine o objeto estreito, mantenha o emissor partilhado

Exporte antes de eliminar. Sem cópia de segurança, a única recuperação é reemitir, o que numa CA privada significa voltar a quem gere a PKI. O PFX exportado é também o que entrega se a remoção se revelar a decisão errada.

certutil -user -exportPFX -p backup My <serial> C:\temp\vpn-id.pfx
certutil -user -delstore My <serial>
Remove-Item Cert:\CurrentUser\My<thumbprint>

A flag -user é a que as pessoas deixam cair por acidente. Sem ela, o certutil trabalha no armazenamento da máquina, o que significa uma shell elevada, um conjunto diferente de certificados e um raio de impacto que agora inclui todas as outras contas da máquina.

No macOS e no Linux a forma é a mesma: identificar, exportar e depois remover do armazenamento mais estreito que explica o sintoma. Remover o ficheiro em /usr/local/share/ca-certificates e voltar a correr update-ca-certificates é suficiente; --fresh só ajuda quando as ligações simbólicas em /etc/ssl/certs já estão inconsistentes. Os sistemas da família RHEL guardam as âncoras em /etc/pki/ca-trust/source/anchors, onde trust anchor --remove faz o mesmo trabalho.

sudo security delete-certificate -Z <sha1> /Library/Keychains/System.keychain
sudo rm /usr/local/share/ca-certificates/example-vpn.crt
sudo update-ca-certificates
sudo trust anchor --remove /etc/pki/ca-trust/source/anchors/example-vpn.crt

Antes de eliminar um certificado de CA, verifique o que mais se encadeia nele. Listar os sujeitos dentro do pacote é uma verificação de duas linhas e responde se essa âncora está a fazer outro trabalho:

openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt \
  | openssl pkcs7 -print_certs -noout | grep -i example

Eliminar o ficheiro não é revogar a identidade

Uma eliminação local remove uma cópia. A chave privada pode ainda estar num p12 anexado a um ticket antigo, numa pasta de cópias de segurança ou no segundo portátil configurado ao mesmo tempo. Se isto era uma identidade de cliente, o gateway continua a aceitar qualquer cópia dessa chave até a identidade ser recusada do lado do servidor.

Para uma OpenVPN PKI, isso significa revogar o certificado e garantir que a CRL referida por crl-verify está atualizada; easyrsa revoke e depois easyrsa gen-crl é a versão curta. Para um gateway ligado a um fornecedor de identidade, desative lá o utilizador ou remova o dispositivo, porque o certificado é apenas uma credencial em jogo. Eliminar a cópia local enquanto a conta continua ativa parece limpeza e não é.

O trabalho de incidente tem outra ordem: preserve primeiro o certificado, o seu número de série e o registo de revogação, e só depois elimine e revogue. Esses registos não custam nada e não exigem deixar uma credencial funcional no lugar.

Verifique com um handshake e uma segunda aplicação

Verifique a cadeia de fora, não a partir da lista do armazenamento que acabou de editar. O armazenamento mostra a sua edição; o handshake mostra o resultado.

openssl s_client -connect vpn.example.com:443 -servername vpn.example.com \
  -CAfile /etc/ssl/certs/ca-certificates.crt -verify_return_error < /dev/null
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt vpn-gateway.pem

Um código de retorno 0 significa que as âncoras restantes ainda validam o gateway. Um erro de cadeia depois de remover a âncora é o resultado esperado, e confirma que atingiu a âncora em uso e não um duplicado num armazenamento que o cliente nunca lê. Se a ligação ainda funcionar, procure uma segunda cópia, um armazenamento incorporado na aplicação ou um certificado fixado, tudo comum em clientes que trazem a sua própria lista de confiança.

Depois teste algo não relacionado: um site interno, um cliente de correio, um espelho de pacotes. Isso mede o raio de impacto de forma barata, antes de a janela de mudança fechar.

  • Papel identificado como identidade, intermédio ou âncora de confiança
  • Número de série e impressão digital registados, e a cópia exportada para o local aprovado
  • Eliminação feita no âmbito mais estreito que explica o sintoma
  • Autorização do lado do servidor revogada quando uma pessoa ou dispositivo saiu
  • Handshake explicado, e uma aplicação não relacionada testada de novo
  • Payload MDM ou perfil de gestão atualizado, ou o certificado volta

Se o certificado voltar depois de um reinício, a tarefa não está terminada: algo o possui e o reinstala. Encontre esse proprietário antes de eliminar outra vez, porque uma terceira eliminação comportar-se-á exatamente como as duas primeiras.

Artigos relacionados