Decodificador de certificados e PEM

Decodifica certificados X.509 e pedidos de assinatura a partir de PEM — sujeito, emissor, validade, nomes alternativos, extensões e impressões digitais.

Entrada PEM

Cole PEM acima e será decodificado aqui.

O que esta ferramenta faz

Um certificado chega como um bloco de Base64 entre duas linhas de traços, e não há maneira de saber nada sobre ele só de olhar. Isto decodifica-o: a quem foi emitido e por quem, quando expira, que nomes de host cobre, que tipo de chave contém e todas as extensões que transporta. Cole uma cadeia inteira e cada certificado é confrontado com o seguinte.

Tudo roda no seu navegador. Aqui isso importa mais do que na maioria das ferramentas: a alternativa costuma ser colar um certificado de produção no servidor de outra pessoa, ou lembrar-se da invocação do openssl, o que quase ninguém faz.

O PEM é apenas o invólucro

Os traços e o Base64 são embalagem. Lá dentro está DER, uma codificação binária de uma estrutura chamada ASN.1, e a etiqueta entre os traços diz que estrutura esperar:

CERTIFICATE           um certificado X.509 emitido
CERTIFICATE REQUEST   uma CSR: o que pediu a uma AC
PUBLIC KEY            uma chave solta, sem identidade
PRIVATE KEY           a metade secreta, recusada aqui

O mesmo certificado também pode chegar como DER em bruto num arquivo .cer ou .crt, sem traços e sem Base64. Se um arquivo abre como ruído binário em vez de texto, é disso que se trata; passe-o primeiro a Base64, ou exporte-o como PEM.

O que há realmente num certificado

Os campos centrais são os mesmos em todos os certificados alguma vez emitidos:

  • Sujeito — de quem trata o certificado. Para um site é hoje normalmente só um nome comum, e muitas vezes nada mais.
  • Emissor — a autoridade de certificação que o assinou. O seu nome de sujeito aparece tal e qual como emissor de tudo o que assina, e é isso que torna possível verificar a cadeia.
  • Validade — dois instantes absolutos, sempre em UTC. Esta ferramenta mostra ambos e calcula quanto falta no seu navegador, já que a máquina que gerou esta página não faz ideia de quando a está lendo.
  • Número de série — único por emissor, e o identificador usado quando um certificado é revogado.
  • Algoritmo de assinatura — com o que o emissor assinou, por exemplo SHA-256 com ECDSA.
  • Chave pública — o tipo e o tamanho. Em RSA é o comprimento em bits do módulo; em EC é uma propriedade da curva nomeada, por isso P-256 tem sempre 256 bits.

Um campo que as pessoas esperam e já não encontram: o nome comum do sujeito não é o que os navegadores verificam. Há anos que é ignorado para a correspondência do nome de host. O que conta é a extensão dos nomes alternativos, abaixo.

As extensões que decidem se funciona

Um certificado pode transportar um número qualquer de extensões. Cinco determinam se será mesmo aceito, e esta ferramenta decodifica-as por completo:

  • Nomes alternativos do sujeito — os nomes de host, endereços IP ou de e-mail para os quais o certificado é válido. É o campo que os navegadores verificam, e um certificado cujos nomes alternativos não incluam o que escreveu será recusado por muito correto que seja tudo o resto.
  • Restrições básicas — se é uma autoridade de certificação, e quantos intermédios podem ficar por baixo. Um certificado final marcado como AC, ou o contrário, parte a cadeia.
  • Utilização da chave — para que a chave pode servir afinal: assinar, cifrar chaves, assinar certificados. Marcada como crítica quase sempre, o que obriga o software a recusar o certificado em vez de ignorar uma utilização que não compreende.
  • Utilização alargada da chave — a finalidade: servidor TLS, cliente TLS, assinatura de código, correio. Um certificado sem autenticação de servidor TLS não servirá um site, e é uma surpresa frequente em certificados emitidos para outra coisa.
  • Identificadores de chave do sujeito e da autoridade — resumos curtos que permitem ao software ligar depressa um certificado ao seu emissor quando vários compartilham um nome.

Qualquer outra extensão é listada com o seu nome quando é conhecido, o seu OID, e se está marcada como crítica. Nada é descartado em silêncio: uma extensão que esta ferramenta não decodifica continua aparecendo, para que se veja que está lá.

Cadeias, e o que aqui significa «contínua»

Um servidor quase nunca envia um só certificado. Envia o seu mais os intermédios necessários para chegar a uma raiz em que o cliente já confia. A ordem importa e o arquivo chama-se normalmente fullchain.pem:

bloco 1   final          subject: example.com     issuer: Example CA R3
bloco 2   intermédio     subject: Example CA R3   issuer: Example Root
bloco 3   raiz           muitas vezes omitida: o cliente já a tem

Cada certificado nomeia o seu emissor, e o certificado seguinte deve ter exatamente esse nome como sujeito. Esta ferramenta compara esses dois nomes byte a byte e diz se coincidem. É a única relação verificável sem rede, e pega as duas falhas que explicam a maioria dos problemas de cadeia: um intermédio esquecido e blocos colados pela ordem errada.

Essas falhas têm um sintoma característico. Os navegadores de secretária muitas vezes tapam um intermédio em falta indo buscá-lo eles próprios, por isso o site parece bem no notebook e falha num celular, numa aplicação móvel ou a partir do curl. Se é isso que está depurando, cole aqui primeiro a cadeia completa.

O que esta ferramenta não lhe diz

Não verifica assinaturas, e não pode. Confirmar que um certificado foi mesmo assinado pelo seu emissor precisa da chave pública deste; decidir se esse emissor merece crédito precisa de um repositório de confiança. Um arquivo colado não fornece nenhum dos dois. Também não pode verificar a revogação, que exige um pedido de rede à AC.

Por isso «a cadeia é contínua» significa aqui que os nomes encaixam, não que a cadeia seja válida. Uma cadeia de certificados falsificados encaixaria na perfeição. Aquilo para que a verificação serve é encontrar erros estruturais na sua própria configuração — que é exatamente o que as pessoas estão vendo quando colam uma cadeia num decodificador.

Impressões digitais e chaves privadas

A impressão digital SHA-256 é um resumo do certificado inteiro, e é o que se compara com um valor que alguém lhe passou ou com um pin. Repare no que identifica: o certificado, não a chave que ele contém. Renovar um certificado para a mesma chave produz uma impressão diferente, e é essa a razão habitual para um pin partir na renovação. A impressão SHA-1 também aparece porque ferramentas e consoles antigos continuam imprimindo-a — só para identificação; o SHA-1 não tem nada que assinar seja o que for.

As chaves privadas são reconhecidas e recusadas. Nada do que cola aqui sai do seu navegador, por isso a recusa não é acerca desta página: é que colar uma chave privada num formulário web é um hábito que mais vale não ganhar, e o próximo site que a pedir pode não rodar localmente. Se precisa de confirmar que uma chave e um certificado andam juntos, compare localmente a chave pública do certificado com a derivada da chave.

Perguntas frequentes

Isto diz se o meu certificado é de confiança?
Não. A confiança depende de um repositório de confiança e de uma verificação de assinatura, e nenhuma delas é possível a partir de um arquivo colado. Relata o que o certificado diz de si próprio, e se os nomes de uma cadeia encaixam.
O meu site funciona no Chrome no notebook mas falha no celular. O que devo ver?
Quase sempre um intermédio em falta. Os navegadores de secretária costumam ir buscar o certificado em falta e escondem o problema; outros clientes não. Cole aqui a sua cadeia completa: se a conexão entre dois certificados aparecer como partida, é aí que está a falha.
Por que o nome comum não corresponde ao meu site?
Porque não é o que é verificado. A correspondência do nome de host usa a extensão dos nomes alternativos, e há anos que é assim. Veja a linha dos nomes alternativos: se o nome de host não estiver lá, o certificado não o cobre, diga o que disser o nome comum.
Por que não decodifica a minha chave privada?
De propósito. Nada do que colar sai do seu navegador, mas colar chaves privadas em páginas web é um hábito a evitar, e esta ferramenta recusa-se a ensiná-lo. Certificados e pedidos de assinatura não contêm segredos e são decodificados normalmente.
Qual é a diferença entre um certificado e uma CSR?
Uma CSR é o que envia a uma autoridade de certificação: o seu nome de sujeito, a sua chave pública e as extensões que pede, assinados por si. Um certificado é o que volta, com o nome da própria AC como emissor, uma janela de validade e um número de série. Esta ferramenta decodifica ambos.
O meu certificado é enviado para algum lugar?
Não. A análise, a decodificação e as impressões digitais rodam todas no seu navegador; nada do que colar sai do seu dispositivo.

Ferramentas relacionadas