Como listar os certificados armazenados em um keystore PKCS12 com keytool?

88

Eu queria listar os certificados armazenados em um keystore PKCS12.

O keystore tem a extensão .pfx

David García González
fonte

Respostas:

146

Se o armazenamento de chaves for do tipo PKCS12 ( .pfx), você deve especificá-lo com -storetype PKCS12(quebras de linha adicionadas para facilitar a leitura):

keytool -list -v -keystore <path to keystore.pfx> \
    -storepass <password> \
    -storetype PKCS12
David García González
fonte
6
Se você preferir um utilitário de interface gráfica, encontrei o Keystore Explorer, um substituto de GUI de código aberto para os utilitários de linha de comando Java keytool, jarsigner e jadtool. keystore-explorer.sourceforge.net
David García González
Obrigado pela dica @David. É bom ver que o projeto ainda está ativo também, ao contrário de tantos outros projetos!
John Rix
excelente dica sobre essa ferramenta freeware - geralmente prefiro linhas de comando, mas isso é muito bom
Rhubarb
1
Isso deve funcionar com ( .p12)? Eu recebojava.io.IOException: Invalid keystore format
IgniteCoders
Isso não funciona com um armazenamento de certificados P12 (março de 2019, versão mais recente do KeyTool)
Harald Coppoolse
29

Você também pode usar opensslpara realizar a mesma coisa:

$ openssl pkcs12 -nokeys -info \
    -in </path/to/file.pfx> \
    -passin pass:<pfx's password>

MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    localKeyID: XX XX XX XX XX XX XX XX XX XX XX XX XX 48 54 A0 47 88 1D 90
    friendlyName: jedis-server
subject=/C=US/ST=NC/L=Raleigh/O=XXX Security/OU=XXX/CN=something1
issuer=/C=US/ST=NC/L=Raleigh/O=XXX Security/OU=XXXX/CN=something1
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
slm
fonte
3
Só para dizer que também funciona com arquivos .p12. Muito útil, obrigado!
Rich Ross
@PhilipRego claro que você pode, apenas coloque-os entre aspas simples.
slm
Eu queria ver o alias também conhecido como nome amigável. Tive que usar "openssl pkcs12 -nodes -in </path/to/file.pfx> -passin pass: <pfx's password>"
Domo
3

Você pode listar as entradas (detalhes de certificados) com o keytool e até mesmo não precisa mencionar o tipo de loja.

keytool -list -v -keystore cert.p12 -storepass <password>

 Keystore type: PKCS12
 Keystore provider: SunJSSE

 Your keystore contains 1 entry
 Alias name: 1
 Creation date: Jul 11, 2020
 Entry type: PrivateKeyEntry
 Certificate chain length: 2
atormentar
fonte
Por favor, considere explicar seu código e como ele ajudaria, para que outras pessoas possam se beneficiar com isso.
Amit Verma
Atualizou a resposta.
harry
2

O que está faltando na pergunta e em todas as respostas é que você pode precisar da senha para ler dados públicos do armazenamento de chaves PKCS # 12 (.pfx). Se você precisa de uma senha longa ou não, depende de como o arquivo PKCS # 12 foi criado. Você pode verificar a estrutura ASN1 do arquivo (executando-o por meio de um analisador ASN1, openssl ou certutil podem fazer isso também), se os dados PKCS # 7 (por exemplo, prefixo OID 1.2.840.113549.1.7) estiverem listados como 'criptografados' ou com uma cipher-spec ou se a localização dos dados na árvore asn1 estiver abaixo de um nó criptografado, você não será capaz de lê-lo sem o conhecimento da senha. Isso significa que seu comando 'openssl pkcs12' falhará com erros (a saída depende da versão). Para aqueles que estão se perguntando por que você pode estar interessado no certificado de um PKCS # 12 sem conhecer a senha. Imagine que você tem muitos keystores e muitas frases de fase e é muito ruim em mantê-los organizados e não quer testar todas as combinações, o certificado dentro do arquivo pode ajudá-lo a descobrir qual é a senha. Ou você está desenvolvendo um software para migrar / renovar um armazenamento de chaves e precisa decidir com antecedência qual procedimento iniciar com base no certificado contido, sem interação do usuário. Portanto, os últimos exemplos funcionam sem senha, dependendo da estrutura do PKCS # 12. Ou você está desenvolvendo um software para migrar / renovar um armazenamento de chaves e precisa decidir com antecedência qual procedimento iniciar com base no certificado contido, sem interação do usuário. Portanto, os últimos exemplos funcionam sem senha, dependendo da estrutura do PKCS # 12. Ou você está desenvolvendo um software para migrar / renovar um armazenamento de chaves e precisa decidir com antecedência qual procedimento iniciar com base no certificado contido, sem interação do usuário. Portanto, os últimos exemplos funcionam sem senha, dependendo da estrutura do PKCS # 12.

Só queria acrescentar isso, porque eu mesmo não encontrei uma resposta e gastei muito tempo para descobrir.

xordonkey
fonte
2
openssl pkcs12 -info -in keystore_file
MIchal Rudnicki
fonte