As letras numa explicação de RSA nomeiam campos dentro de um objeto, não ficheiros que uma ferramenta PKI distribui. Um ficheiro de chave privada contém uma estrutura cujos primeiros campos são públicos e cujos campos posteriores nunca devem sair da máquina que termina o túnel. Entre estes dois factos estão a maioria das perguntas práticas sobre que ficheiro responde a que pergunta. Este manual lê primeiro a estrutura e depois os comandos que a inspecionam sem a derramar.

Confirme que a chave é RSA antes de procurar números primos

Um certificado prova que uma chave existe e foi assinada; não prova que a chave seja RSA. Os sistemas podem assentar em curvas elípticas ou Ed25519, e a mesma disposição de diretorias serve todos. Verifique o algoritmo antes de começar a procurar fatores primos que nunca lá estiveram.

Estes três comandos só de leitura respondem à pergunta e registam a versão da ferramenta.

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

A versão importa porque os nomes das opções mudaram entre versões principais. Na saída do certificado, encontre a linha do algoritmo de chave pública e o tamanho da chave; na saída da chave, uma chave RSA imprime um módulo e um expoente público. Uma chave de curva elíptica imprime, em vez disso, uma curva com nome, e nenhuma pesquisa produzirá n nem q a partir dela.

Leia a estrutura em vez do base64

PEM é base64 envolvido em linhas de cabeçalho, e descodificá-lo dá DER, ou seja, uma estrutura serializada e não um único inteiro enorme. As chaves privadas RSA viajam em dois contentores comuns, PKCS#1 e PKCS#8, e ambos se resolvem no mesmo conjunto de números.

No caso de dois primos, a estrutura privada transporta nove campos: uma versão, o módulo n, o expoente público e, o expoente privado d, os primos p e q, dois expoentes CRT e um coeficiente CRT. RFC 8017 secção A.1 define esses componentes e a disposição ASN.1, e também permite mais de dois primos, razão pela qual um analisador genérico pode imprimir entradas de primos adicionais. Repare na ordem, porque explica um erro frequente: a metade pública está guardada dentro do ficheiro privado, por isso a presença de um campo público não torna esse ficheiro seguro para partilhar. Tudo depois disso é o material que tem de ficar no anfitrião.

A codificação acrescenta uma camada fácil de confundir com o conteúdo. openssl asn1parse desenha a estrutura como uma árvore para que a ordem dos campos fique visível, e não decifra nada nem diz se a chave é utilizável.

Emparelhe um certificado com uma chave sem imprimir a chave

A pergunta seguinte costuma ser se um certificado e uma chave andam juntos. Comparar os módulos responde a isso, mas também copia material próximo do privado para uma transcrição de terminal que pode acabar num ticket. Comparar as metades públicas responde à mesma pergunta sem nada sensível no ecrã.

openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH

Ficheiros idênticos significam que o certificado transporta a metade pública dessa chave, e uma diferença significa que está a segurar o par errado. Essa discrepância é a causa mais comum de um túnel que negoceia alegremente e depois recusa a autenticação. Depois remova os dois ficheiros temporários; não guardam nada secreto, mas um diretório de trabalho limpo é mais fácil de raciocinar a meio de um incidente.

Saiba o que os ficheiros vizinhos não são

Um certificado não é uma chave pública cifrada que o par desbloqueia com o certificado da CA; é uma ligação assinada entre uma chave pública e dados de identidade. A chave de assinatura privada da CA mantém-se separada do seu próprio certificado e de cada chave de cliente. Um pedido também não é um certificado: transporta a informação pedida e a chave pública com uma assinatura sobre o pedido, o que faz dele entrada de inscrição e não prova de direito.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

Duas dessas entradas confundem-se com parâmetros RSA com frequência suficiente para serem nomeadas duas vezes. Um ficheiro de parâmetros Diffie-Hellman contém parâmetros de grupo para o estabelecimento de chave e nenhum primo RSA, ainda que também se imprima como um primo grande. Uma lista de revogação publica o estado dos certificados e não é um lugar onde um expoente privado se pudesse esconder.

Por isso cada linha de inventário deve registar quatro coisas: tipo de objeto, proprietário, finalidade e se inclui material privado. A última coluna decide onde o ficheiro pode ser copiado, e é a que as pessoas saltam.

Registe o emparelhamento e depois verifique o handshake

Antes de mudar seja o que for, guarde a saída da verificação com a data e a versão do OpenSSL. Uma rotação posterior pode então ser comparada com provas em vez de com memória.

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Depois da comparação da chave pública, percorra o caminho que consome o par: suba o túnel, confirme que o certificado é apresentado e aceite, e verifique que identidade a gateway registou. Se a chave e o certificado coincidem e a autenticação continua a falhar, o defeito está na confiança, no mapeamento de identidade ou na política de acesso, não no emparelhamento.

Para reverter, guarde a chave e o certificado anteriores num diretório datado e restaure os dois em conjunto, nunca um dos dois. Uma chave sem o seu certificado e um certificado sem a sua chave falham de forma idêntica do exterior, o que torna os pares meio restaurados caros de deslindar às duas da manhã.

Artigos relacionados