Ir para o conteúdo
AZ Tools

Inspetor de keystore PKCS#12

Lê um keystore PKCS#12 como o `openssl pkcs12 -info` faz, direto dos bytes e inteiramente dentro do navegador. Metade do arquivo é legível sem senha nenhuma, e é essa metade que aparece primeiro: a versão do PFX, o digest do MAC com o número de iterações e o tamanho do sal, e uma linha por bloco de conteúdo dizendo se ele está em claro ou cifrado e com qual algoritmo — PBES2 com AES-256-CBC e PBKDF2-HMAC-SHA256 em tudo que o OpenSSL 3 escreve, ou pbeWithSHA1And40BitRC2-CBC nos arquivos que o Java 21 e o OpenSSL atual se recusam a carregar. Muitas vezes essa linha já é a resposta inteira. Com a senha, o MAC é verificado usando a derivação PKCS#12 do apêndice B da RFC 7292 — que não é PBKDF2 e é o detalhe que a maioria das reimplementações erra — e os sacos são decifrados: cada certificado com titular, emissor, número de série, período de validade, nomes alternativos, algoritmo da chave e impressão SHA-256, na ordem da folha até a raiz, junto do friendlyName e do localKeyID de cada saco. Em seguida ele responde à pergunta que costuma motivar a abertura de um keystore: existe uma chave privada aqui e ela é a chave do certificado folha? A metade pública é reconstruída a partir da própria chave e comparada byte a byte com o SubjectPublicKeyInfo do certificado, então o veredito não é um palpite baseado em um alias igual. O que ele não faz é decifrar um arquivo antigo: o WebCrypto não tem RC2, RC4, DES nem Triple DES, então esses keystores são identificados como legados em vez de lidos pela metade — o MAC deles ainda é verificado, então dá para saber se a senha está certa. Também não valida a cadeia contra nenhum repositório de confiança.

Como usar

  1. Solte o .p12 ou .pfx na caixa. A estrutura aparece na hora: não é preciso senha para ver o algoritmo do MAC, as iterações e a cifra que protege cada bloco.
  2. Se você está investigando uma importação que falhou, comece pela tabela de blocos. Uma linha com pbeWithSHA1And40BitRC2-CBC ou 3-KeyTripleDES indica keystore legado, e é isso que Java 21, OpenSSL 3 e Windows estão recusando.
  3. Digite a senha e clique em Abrir. A linha do MAC diz de uma vez se a senha está certa e se o arquivo foi alterado depois de gravado.
  4. Olhe a etiqueta «Chave e certificado»: ela compara a chave pública reconstruída a partir da chave privada com a do certificado folha, que é o teste real de o keystore poder servir TLS.
  5. Leia os certificados na ordem: primeiro a folha, acima dela cada emissor. Faltar um intermediário aqui é exatamente o que faz um servidor funcionar num navegador que já o visitou e falhar em todos os outros.

Perguntas frequentes

Por que vejo os algoritmos e o MAC antes de digitar a senha?
Porque nada disso é cifrado. Um PFX é um número de versão, um authenticated safe e um bloco MacData; o safe é uma lista de blocos de conteúdo, cada um com SafeContents em claro ou um EncryptedData do PKCS#7 cujo AlgorithmIdentifier traz a cifra, o sal e as iterações abertamente. Só o conteúdo dos sacos é protegido. É por isso que um inspetor consegue dizer que o arquivo é um keystore RC2 legado, quão fraco é o número de iterações e quantos blocos ele tem sem saber a senha — e por isso não vale tratar um .p12 como opaco só porque ele tem senha.
Ele diz que meu keystore usa algoritmos legados. O que eu faço?
Converta uma vez com o OpenSSL: `openssl pkcs12 -legacy -in old.p12 -nodes -out tmp.pem -passin pass:…` e depois `openssl pkcs12 -export -in tmp.pem -out new.p12`, que no OpenSSL 3 grava PBES2 com AES-256-CBC e PBKDF2-HMAC-SHA256 por padrão. Apague o tmp.pem em seguida: ele guarda a chave privada sem cifra. A opção -legacy existe porque o OpenSSL 3 moveu RC2, RC4 e DES simples para o provedor legacy e o Java tirou os mesmos algoritmos do tratamento padrão de keystores; um arquivo escrito por um appliance de 2015 não está corrompido, apenas cifrado com primitivas que ninguém habilita mais.
A senha do MAC e a da cifragem são a mesma?
Em princípio podem ser duas: a RFC 7292 permite uma senha para a integridade e outra para a confidencialidade, e algumas ferramentas corporativas fazem isso. Na prática todos os exportadores comuns usam a mesma string, e por isso um MAC que falha quase sempre significa senha errada, não arquivo adulterado. As derivações também são diferentes: a chave do MAC vem da derivação PKCS#12 do apêndice B com ID 3, enquanto a cifragem moderna dos sacos usa PBKDF2 sobre os bytes da senha. Assim, um keystore realmente gravado com duas senhas pode passar no MAC e ainda assim não decifrar.
Meu .p12 abre, mas não tem chave privada. Para onde ela foi?
Provavelmente nunca foi exportada. O `openssl pkcs12 -export -nokeys` e quase todos os botões de «exportar a cadeia de certificados» de um navegador ou de um console MMC gravam um keystore só de certificados, com apenas certBags dentro — um PFX perfeitamente válido. É o arquivo que aparece na pior hora, porque um servidor web ou um balanceador importa sem reclamar e depois falha o handshake TLS com erro de chave que não confere. Aqui a lista de sacos mostra exatamente quais existem, então um keystore sem saco de chave é visível antes do deploy.
Para que serve o ID local da chave?
O localKeyID é o atributo que emparelha um saco de certificado com um saco de chave, já que um keystore pode conter vários de cada. O OpenSSL usa o hash SHA-1 da chave pública do certificado, Windows e Java usam valores próprios e o formato não exige esquema nenhum. O friendlyName é o apelido humano: o que o keytool lista e o que o repositório de certificados do Windows exibe, e importar um keystore cujo friendlyName colide com um alias existente é a causa comum do erro «alias already exists». Os dois aparecem por saco aqui, junto do bloco de onde cada um veio.
É seguro abrir num site um keystore que contém chave privada?
Esta página não envia o arquivo nem a senha a lugar nenhum: a análise, a verificação do MAC, o PBKDF2, a decifragem AES-CBC e a comparação entre chave e certificado rodam na sua aba via WebCrypto, e a senha fica apenas no estado do componente até você fechá-la. No localStorage sobra só o nome do arquivo. Ainda assim, com um keystore de produção o hábito mais seguro é conferir com um `openssl pkcs12 -info` offline; use isto para os keystores que você está depurando e desconfie de qualquer ferramenta web que peça o upload de um .p12.

Ferramentas relacionadas