pressione ⌘K para trocar de ferramenta
SECURITY

Visualizador de Certificado SSL e CSR

Leia um certificado SSL ou CSR no navegador. Nada é enviado.

local
cert-viewer

🖥 Reads an X.509 certificate or a PKCS#10 CSR entirely in your browser. Nothing is uploaded. A private key is refused rather than displayed.

§01 SOBRE ESTA FERRAMENTA

Visão geral

Um certificado é um conjunto assinado de afirmações em DER, uma codificação binária, embrulhado em Base64 para transporte. Tudo o que corre mal com certificados na prática é visível nessas afirmações: um nome ausente da lista SAN, uma janela de validade que termina mais cedo do que se esperava, um intermédio colado onde vai uma folha, um uso de chave que proíbe o uso para que foi comprado.

Este visualizador descodifica o PEM, analisa o DER e apresenta o conteúdo — tanto para certificados X.509 como para pedidos de certificado PKCS#10. Fá-lo no seu navegador, e recusa terminantemente chaves privadas.

Como usar

  1. Cole um bloco PEM que comece por -----BEGIN CERTIFICATE----- ou -----BEGIN CERTIFICATE REQUEST-----.
  2. Leia a síntese: tipo, sujeito, emissor, validade, dias restantes.
  3. Confronte a lista SAN com os nomes de anfitrião que espera servir.

Para obter um certificado em uso a partir de um servidor: openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509

Os nomes alternativos são os únicos que contam

O Common Name do sujeito parece o nome do certificado e, para a validação do nome de anfitrião, não é usado. O Chrome ignorou-o desde a versão 58, e os outros navegadores seguiram. Apenas a extensão subjectAltName é consultada.

As consequências práticas:

  • Um certificado cujo nome de anfitrião aparece apenas no CN falha a validação em todos os navegadores atuais, e ao mesmo tempo parece completamente correto em qualquer ferramenta que exiba o sujeito em destaque.
  • Um curinga *.example.com corresponde a uma só etiqueta. Cobre www.example.com e não a.b.example.com, e não cobre o example.com nu — esse nome precisa da sua própria entrada SAN, e por isso os certificados listam habitualmente ambos.
  • Os SAN têm tipo. As entradas dNSName, iPAddress, rfc822Name e URI são todas exibidas, e um nome de anfitrião colocado no tipo errado não corresponde.

Como ler a chave e o seu uso

O algoritmo e o tamanho da chave são lidos da estrutura da chave pública. Para RSA, o comprimento do módulo dá diretamente o tamanho em bits. Para EC é indicada a curva nomeada quando existe uma e, quando o certificado transporta parâmetros explícitos em vez de um nome de curva, isso é declarado como tal — os parâmetros explícitos são rejeitados pela maioria das pilhas TLS modernas, pelo que vale a pena vê-lo. Sem nome de curva, o tamanho é deduzido do comprimento do ponto público, e é por isso que uma chave P-521 é relatada como 521 e não como os 528 que uma contagem ingénua de bytes daria.

keyUsage e extendedKeyUsage descrevem o que a chave está autorizada a fazer, e ambos são impostos. Um certificado sem serverAuth no seu EKU não funcionará para TLS mesmo que tudo o resto esteja correto — resultado frequente quando um certificado de cliente é instalado por engano num servidor.

basicConstraints diz se o certificado é uma AC. Se colou aquilo que julgava ser o seu certificado folha e ele é relatado como AC, colou o intermédio — a causa habitual de uma cadeia que valida localmente e falha noutros lugares.

A lista de extensões mostra cada extensão presente com o seu indicador de crítica. Uma extensão crítica que o cliente não compreenda tem de provocar a rejeição, segundo a RFC 5280, pelo que uma extensão crítica desconhecida merece ser investigada.

Exemplos

  • Um nome que não valida — verifique a lista SAN, não o sujeito. Se o nome de anfitrião só estiver no CN, o certificado tem de ser reemitido.
  • Ler uma CSR antes de a enviar — a CSR fixa o sujeito e a chave pública. Confirmar os nomes antes da submissão evita um ciclo de reemissão, sobretudo quando a AC o cobra.
  • Confirmar que certificado tem — folha, intermédio e raiz parecem-se como texto. basicConstraints e a relação entre sujeito e emissor identificam-nos de imediato: uma raiz tem sujeito e emissor idênticos.
  • Planear renovações — os dias restantes são exibidos diretamente. Com o sector a avançar para durações máximas muito mais curtas, um processo de renovação manual que funcionava para certificados anuais não sobrevive a essa mudança.
  • Auditar um conjunto — cole cada bloco à vez. Um conjunto na ordem errada, ou com um certificado sem relação incluído, é uma causa frequente de erro de cadeia que só aparece em alguns clientes.

Observações

Apenas os blocos PEM CERTIFICATE e CERTIFICATE REQUEST são aceites. Qualquer outro tipo de bloco, incluindo todos os formatos de chave privada, é recusado com um erro que nomeia o que foi encontrado. De um bloco recusado nada é analisado nem exibido.

O analisador DER rejeita o que o DER proíbe: codificações de comprimento indefinido, comprimentos que passam do fim do tampão e aninhamento além de 32 níveis. Uma colagem truncada produz uma mensagem concreta como ASN.1 length exceeds buffer em vez de um relatório parcialmente preenchido, porque um certificado analisado a meio convida à leitura errada. Quando a análise falha, qualquer resultado anterior é apagado pela mesma razão.

As datas são exibidas tal como estão codificadas no certificado. GeneralizedTime transporta um ano de quatro dígitos; UTCTime transporta dois, e a RFC 5280 fixa a interpretação em 50–99 para 19xx e 00–49 para 20xx. Os dias restantes são calculados contra o relógio do seu dispositivo, pelo que uma hora de sistema errada dá um número errado.

Esta ferramenta lê um certificado isoladamente. A construção da cadeia, a revogação e a confiança não são avaliadas. Para ver o que um servidor envia realmente e como responde, use cabeçalhos HTTP e o verificador de cabeçalhos de segurança. Tudo aqui acontece no seu navegador — ver a política de privacidade.

FAQ
O certificado é enviado para algum lado?
Não. O PEM é descodificado de Base64 e a estrutura DER é analisada no seu navegador. Nada é enviado e, depois de a página carregar, funciona sem ligação. Isto importa mais do que parece — a mesma área de transferência que contém um certificado continha normalmente a sua chave privada um instante antes.
O que acontece se eu colar uma chave privada por engano?
É recusada com um erro que nomeia o tipo de bloco, e nada dela é analisado ou exibido. A ferramenta aceita apenas blocos CERTIFICATE e CERTIFICATE REQUEST. Quem lida com certificados tem a chave correspondente à mão: recusar é a única predefinição segura.
Porque é que o certificado indica um domínio tanto no sujeito como na lista SAN?
Porque só a lista SAN conta. Os navegadores deixaram de usar o CN do sujeito para a correspondência de nome de anfitrião há anos — o Chrome desde a versão 58 — pelo que um certificado cujo nome apenas aparece no CN falha a validação por correto que pareça. O CN é mantido para exibição e para ferramentas antigas.
Isto consegue dizer-me se o certificado é de confiança?
Não. A confiança depende da cadeia até uma raiz em que o seu cliente confie, do estado de revogação e da hora atual no cliente. Aqui lê-se o que um certificado afirma sobre si mesmo. Um certificado autoassinado e um de uma AC pública parecem igualmente válidos aqui, e é no campo do emissor que se vê a diferença.
Porque é que a minha CSR não mostra datas de validade?
Uma CSR não as tem. É um pedido que contém um sujeito, uma chave pública e as extensões pedidas, assinado pela chave privada correspondente. A validade é escolhida pela AC emissora, pelo que notBefore e notAfter só existem depois de o certificado ser emitido.
O que significa um número de dias negativo?
O certificado já expirou, e o número indica há quanto tempo. As datas são lidas exatamente como estão codificadas — os anos UTCTime são interpretados segundo a RFC 5280, onde 50 a 99 significa 19xx e 00 a 49 significa 20xx — e comparadas com o relógio do seu dispositivo.