Duas perguntas decidem onde pertence uma chave privada de VPN: se o material da chave pode ser copiado para fora do anfitrião, e se um processo a pode usar sem ninguém ao teclado. O rótulo de marketing de um armazém não responde a nenhuma das duas. Um daemon de túnel que tem de voltar após um reinício precisa de uso sem supervisão, o que exclui tudo o que dependa de um PIN introduzido por uma pessoa.

Escolha entre copiar e usar

Copiar e usar falham de forma diferente, por isso trate-os como dois requisitos em vez de um. Um atacante que consegue ler os bytes da chave leva a identidade para outro anfitrião, e a máquina original não dá por isso. Um atacante que não consegue ler os bytes mas alcança o processo de assinatura continua a autenticar-se enquanto durar esse acesso.

Uma chave em ficheiro é trivialmente copiável, e é também por isso a mais fácil de salvaguardar e restaurar. Um armazém de chaves de software muda a API, não a fronteira: o fornecedor recusa as suas próprias chamadas de exportação, mas o mesmo contexto de administrador que instalou a chave costuma ter outras vias para o material. Não exportável num fornecedor de software é uma afirmação sobre operações suportadas, não uma prova de uma parede de hardware. Trate-o como um quebra-molas contra a cópia casual, não como proteção contra quem já tem a sua sessão.

Um TPM ou um cartão inteligente executa a operação de assinatura dentro do hardware e devolve apenas o resultado. Isso fecha a via de cópia e deixa a via de uso aberta a tudo o que possa pedir uma assinatura.

Ajuste o armazém ao daemon do túnel

O daemon restringe isto mais do que a política de segurança. O WireGuard recebe uma chave privada base64 de um ficheiro ou da entrada de wg set e não tem via para um armazém de certificados, pelo que uma chave de interface suportada por TPM não está em cima da mesa. O OpenVPN compilado contra OpenSSL 3 pode carregar uma chave através de um URI de fornecedor, e o strongSwan inclui um plugin TPM a par do suporte PKCS#11, mas ambos dependem de como o seu pacote foi compilado.

Um daemon que não consegue alcançar o armazém escolhido transforma a fronteira de hardware em decoração. Alguém exporta a chave uma vez, deixa-a num ficheiro, e o resto do desenho corre em silêncio sobre essa cópia.

A renovação é a outra metade do emparelhamento, e é aí que a maioria dos desenhos falha. Um armazém que funciona na primeira inscrição mas exige um início de sessão em consola para cada reemissão é contornado na primeira vez que um certificado expira a uma hora inconveniente. Teste o caminho de reemissão enquanto a chave atual ainda tem meses pela frente.

Inventarie a chave antes de a mover

Registe o que é a chave antes de mudar onde ela vive, porque uma migração que perde os subject alternative names quebra o túnel de uma forma que se lê como uma falha de encaminhamento. Despeje o certificado, confirme que a chave privada é legível onde o daemon a espera e verifique se o par realmente coincide.

openssl x509 -in vpn.crt -noout -subject -ext subjectAltName
openssl pkey -in vpn.key -check -noout
openssl x509 -in vpn.crt -noout -pubkey | openssl sha256
openssl pkey -in vpn.key -pubout | openssl sha256

Os dois últimos resumos têm de ser idênticos. Se não forem, o daemon termina a configuração e depois falha em cada tentativa com um erro de certificado ou de assinatura que não aponta para perto da causa real. O equivalente no WireGuard é mais curto, porque a chave pública deriva diretamente da privada: wg pubkey < /etc/wireguard/wg0.key tem de imprimir a chave do par que o seu servidor já tem guardada.

As permissões pertencem ao mesmo inventário. stat -c '%a %U:%G' /etc/wireguard/wg0.key deveria devolver 600 root:root, e tudo o que seja legível pelo grupo ou pelo mundo significa que a chave já esteve disponível para processos que nunca pretendeu.

Verifique o armazém e a via de uso

A verificação tem três partes, e a terceira é a que se salta. Confirme que a chave existe no armazém escolhido, confirme que o daemon carregou essa chave e não uma cópia esquecida, e depois confirme que ainda arranca quando o artefacto de exportação já não está lá.

certutil -store -user My
certutil -csp "Microsoft Platform Crypto Provider" -key -user
certutil -verifykeys -user My
ipsec listcerts

No Windows o primeiro comando lista o armazém pessoal e imprime o fornecedor de chaves junto de cada entrada, e é aí que aparece um certificado que parece suportado por hardware mas está no fornecedor de software. O segundo lista chaves detidas pelo fornecedor criptográfico da plataforma, pelo que uma identidade VPN em falta aí enquanto o certificado está presente significa que a metade privada vive noutro sítio. Num gateway Linux, o ipsec listcerts reporta o que o strongSwan carregou, incluindo chaves vindas do plugin TPM. Compare impressões digitais ou hashes de chave pública com o inventário em vez de confiar no número de entradas.

O teste negativo é o que prova o desenho. Mova a chave exportada para fora do diretório de configuração do daemon, reinicie o serviço e leia no registo que identidade apresenta. Um túnel que ainda sobe está a usar o armazém; um arranque falhado significa que o desenho corria mesmo sobre uma cópia.

Escreva a renovação e a reversão

A reversão difere muito entre as duas famílias, e essa diferença pertence à nota de desenho, não a uma chamada de incidente. Uma chave em ficheiro pode ser salvaguardada cifrada e restaurada, pelo que uma migração falhada é reversível. Uma chave não exportável não pode ser salvaguardada de todo, o que faz da reemissão e da reinscrição o único caminho de recuperação quando o dispositivo morre.

Verifique a expiração antes de se tornar uma interrupção: openssl x509 -in vpn.crt -noout -checkend 2592000 termina com um código diferente de zero quando o certificado expira dentro de trinta dias, por isso encaixa diretamente numa verificação de monitorização. Uma execução semanal dessa linha apanha a renovação que ninguém agendou.

A remoção acontece no servidor: apague o par ou revogue o número de série, e depois confirme que o túnel falha, já que um cliente com uma sessão em cache pode esconder uma revogação a meio durante algum tempo. A revogação também tem de chegar à via CRL ou OCSP do concentrador, não apenas à base de dados da CA. Um certificado é um documento público, e o perfil RFC 5280 cobre como é validado; nada dessa validação protege uma chave privada copiada antes da rotação.

Escreva a decisão num só lugar: que armazém guarda a chave, que processo a pode usar, quem a pode reemitir e qual é a reversão. Esse parágrafo é o que os auditores pedem, e o que sobrevive a uma mudança de pessoal.

Artigos relacionados