Descodificador de certificados e PEM

Descodifica 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á descodificado 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 descodifica-o: a quem foi emitido e por quem, quando expira, que nomes de anfitrião cobre, que chave contém e todas as extensões que transporta. Cole uma cadeia inteira e cada certificado é confrontado com o seguinte.

Tudo corre 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 ficheiro .cer ou .crt, sem traços e sem Base64. Se um ficheiro 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 sítio web é 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á a ler.
  • 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 anfitrião. 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 aceite, e esta ferramenta descodifica-as por completo:

  • Nomes alternativos do sujeito — os nomes de anfitrião, endereços IP ou de correio 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 correcto 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 pode a chave servir de todo: 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 sítio web, 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 partilham 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 descodifica continua a aparecer, 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 ficheiro chama-se normalmente fullchain.pem:

bloco 1   final          subject: example.com     issuer: Example CA R3
bloco 2   intermedio     subject: Example CA R3   issuer: Example Root
bloco 3   raiz           muitas vezes omitida: o cliente ja a tem

Cada certificado nomeia o seu emissor, e o certificado seguinte deve ter exactamente 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 apanha 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 sítio parece bem no portátil e falha num telemóvel, numa aplicação móvel ou a partir do curl. Se é isso que está a depurar, 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 arquivo de confiança. Um ficheiro 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 é exactamente o que as pessoas estão a ver quando colam uma cadeia num descodificador.

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 consolas antigas continuam a imprimi-la — 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 sítio que a pedir pode não correr 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 arquivo de confiança e de uma verificação de assinatura, e nenhuma delas é possível a partir de um ficheiro colado. Relata o que o certificado diz de si próprio, e se os nomes de uma cadeia encaixam.
O meu sítio funciona no Chrome no portátil mas falha no telemóvel. 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 ligação entre dois certificados aparecer como partida, é aí que está a falha.
Porque é que o nome comum não corresponde ao meu sítio?
Porque não é o que é verificado. A correspondência do nome de anfitrião usa a extensão dos nomes alternativos, e há anos que é assim. Veja a linha dos nomes alternativos: se o nome de anfitrião não estiver lá, o certificado não o cobre, diga o que disser o nome comum.
Porque é que não descodifica 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 descodificados 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 descodifica ambos.
O meu certificado é enviado para algum lado?
Não. A análise, a descodificação e as impressões digitais correm todas no seu navegador; nada do que colar sai do seu dispositivo.