Verificador de certificado e chave
Introduza qualquer mistura de certificados, chaves privadas e CSR — PEM ou DER — e esta bancada prova qual a chave que corresponde a qual certificado, ordena os certificados numa cadeia, converte formatos e gera CSR. As chaves privadas nunca saem do seu navegador: tudo é analisado localmente neste separador, as chaves são mantidas apenas em memória e nunca são carregadas, registadas ou armazenadas, e esta página não faz nenhum pedido de rede. Para descodificar um certificado em profundidade, use o analisador de certificados SSL; para um certificado autoassinado rápido, o gerador de certificados autoassinados.
Adicionar certificados, chaves e CSR
Veredito de emparelhamento
Adicione um certificado e uma chave privada e o veredito aparece aqui: qual a chave que corresponde a qual certificado, provado por uma chave pública idêntica — nunca adivinhado pelos nomes dos ficheiros.
Construtor de cadeias
Com dois ou mais certificados carregados, o construtor ordena-os com a folha primeiro, depois o(s) intermédio(s) e por fim a raiz, emparelhando os nomes de emissor e de sujeito — e depois, onde a criptografia do navegador o permite, verifica a assinatura real de cada elo em vez de confiar nos nomes.
Gerar um CSR
Um pedido de assinatura de certificado para uma chave gerada aqui, no seu navegador: preencha o sujeito, escolha o tipo de chave e transfira o CSR para enviar à sua CA — além da chave privada, que deve guardar em segurança você mesmo. A chave é mostrada apenas aqui; esta página não a guarda.
Pedido de assinatura de certificado (PEM)
Chave privada (PEM) — guarde esta chave em segurança, ela é mostrada apenas aqui
Como o emparelhamento realmente funciona
Um certificado e uma chave privada não são duas metades de um mesmo ficheiro; são dois ficheiros que partilham um mesmo objeto matemático. Quando um par de chaves é gerado, a metade pública é colocada dentro do certificado (e dentro de qualquer CSR feito com essa chave), enquanto a metade privada fica no ficheiro da chave. Dois itens emparelham exatamente quando transportam a mesma chave pública — para RSA, o mesmo módulo e expoente; para EC, o mesmo ponto na mesma curva. Esta página codifica essa chave pública no seu invólucro padrão (o SubjectPublicKeyInfo), aplica SHA-256 à codificação e agrupa cada item carregado por esse hash. O hash mostrado em cada cartão é, portanto, a prova, não um resumo: hashes idênticos não podem acontecer por acaso, e uma não correspondência é igualmente certa, e é por isso que o veredito pode ser dito sem rodeios — esta chave corresponde a este certificado, ou nenhuma chave carregada corresponde. A falha clássica que isto apanha está descrita em quando a sua chave não corresponde ao seu certificado: o recarregamento das 2 da manhã em que o certificado renovado em disco pertence a uma chave diferente da que o servidor tem carregada.
Os nomes dos ficheiros não provam nada. Um diretório cheio de server.crt, server.key, final-v2.pem e um CSR da tentativa de renovação do ano passado é o estado normal de uma infraestrutura herdada, e os nomes são arqueologia, não documentação. Também não o provam uma extensão de ficheiro coincidente ou uma data coincidente. E a verificação tradicional do openssl — comparar o hash do módulo do certificado com o hash do módulo da chave? É exatamente a verificação desta página, limitada a RSA e a um par de cada vez, e falha por completo as chaves EC porque as chaves EC não têm módulo. A impressão digital da chave pública cobre todos os algoritmos por igual, e é por isso que aqui ela é a chave de agrupamento.
Cadeias, ordem e o que «verificado» significa
Espera-se que os servidores apresentem primeiro o certificado folha, depois cada intermédio por ordem, para que um cliente possa percorrer os elos de emissor para sujeito até uma raiz em que já confia. Apresentar os mesmos certificados na ordem errada — ou com um intermédio em falta — produz a clássica família de erros «unable to get local issuer certificate» em clientes que não conseguem obter por si próprios o elo que falta. O construtor acima reconstrói a ordem apenas a partir dos nomes, o que é sempre possível, e depois dá um passo mais: para assinaturas RSA e ECDSA importa a chave pública do emissor e verifica a assinatura sobre os bytes assinados do certificado. Um elo rotulado como assinatura verificada está provado criptograficamente. Um elo rotulado como apenas correspondência de nome não está — os nomes encadeiam, mas a assinatura usa um algoritmo que esta plataforma não verifica (RSA-PSS é o caso habitual), e a página diz isso em vez de disfarçar uma correspondência de nome como prova. Se uma verificação de assinatura falhar, os nomes foram uma coincidência ou uma falsificação, e o construtor mostra a falha a vermelho em vez de produzir um pacote em silêncio.
Formatos: PEM, DER e a questão do .pfx
PEM são bytes DER envolvidos em Base64 com um cabeçalho rotulado; DER é a codificação em bruto. Converter entre eles não perde nada e não prova nada — é o mesmo objeto num envelope diferente — e é por isso que cada cartão oferece ambas as transferências. O Windows e algumas ferramentas Java preferem DER ou PKCS#12; a maioria das ferramentas Unix quer PEM. O PKCS#12 (.pfx/.p12) é outra coisa: é um contentor cifrado com o seu próprio MAC de integridade, e produzir um que todos os consumidores aceitem — com uma proteção que mereça esse nome — não é algo que deva ser feito à mão numa página web. Esta ferramenta deliberadamente não o oferece. Para empacotar você mesmo um par emparelhado, execute o openssl onde os ficheiros vivem: openssl pkcs12 -export -inkey key.pem -in cert.pem -certfile chain.pem -out bundle.pfx — depois de esta página lhe ter dito qual a chave, o certificado e a cadeia que realmente andam juntos.
A análise e o encadeamento são código DER feito à mão para este site (estilo BSD, sem analisador de terceiros); o hash, a verificação de assinaturas e a geração de chaves usam o WebCrypto do navegador. Nenhuma parte desta ferramenta faz um pedido de rede.
Perguntas frequentes
Como é que o verificador prova que uma chave e um certificado andam juntos?
Comparando a chave pública, não os ficheiros. Cada certificado, CSR e chave privada produz a mesma chave pública codificada (o SubjectPublicKeyInfo); esta página aplica-lhe SHA-256 e agrupa os itens cujos hashes coincidem. Uma chave pública idêntica significa que a chave privada é matematicamente aquela para a qual o certificado foi emitido — a mesma verificação que o openssl faz com a sua comparação de módulos, feita para todos os ficheiros de uma vez e para chaves EC além de RSA.
É seguro carregar uma chave privada real numa página web?
Nesta página, sim, pela forma como ela é construída: tudo é analisado localmente no seu navegador, as chaves são mantidas apenas na memória deste separador, nada é carregado, registado ou escrito em qualquer armazenamento, e a página não faz nenhum pedido de rede. O hábito a manter é verificar essa afirmação em qualquer ferramenta antes de colar uma chave — e nunca colar uma chave privada num chat, num ticket ou num «verificador» do lado do servidor que a processa remotamente.
O que significa «apenas correspondência de nome» no construtor de cadeias?
O construtor de cadeias ordena os certificados emparelhando o nome de emissor de cada certificado com o nome de sujeito do seguinte, e depois tenta verificar a assinatura real com a chave pública do emissor. Quando o algoritmo de assinatura é um que o WebCrypto do navegador pode verificar (RSA e ECDSA na prática), o elo é rotulado como «assinatura verificada» ou, se a verificação falhar, «assinatura FALHOU». Tudo o resto — RSA-PSS é o caso comum — é honestamente rotulado como «apenas correspondência de nome»: os nomes alinham, mas esta página não provou criptograficamente o elo.
Porque não há exportação para PKCS#12 (.pfx)?
Um ficheiro PKCS#12 envolve uma chave e um certificado numa cifra baseada em palavra-passe com integridade MAC — um formato que precisa de uma codificação cuidadosa e bem testada. Em vez de oferecer uma versão feita à mão que poderia produzir ficheiros que outro software rejeita (ou, pior, chaves fracamente protegidas), esta página converte entre PEM e DER e deixa o empacotamento .pfx para o openssl: o comando é mostrado na página para que o possa executar onde a chave já vive.
Esta página consegue ler uma chave privada cifrada?
Consegue identificar uma e dizê-lo, mas não consegue usá-la: uma chave cifrada (protegida por palavra-passe) não revela a sua chave pública até ser decifrada, e o emparelhamento é feito sobre a chave pública. Decifre uma cópia localmente com o openssl (pkcs8 -topk8 -nocrypt, ou rsa/ec) e carregue a cópia decifrada — numa máquina em que confie, e apague a cópia depois.