如何使用keytool列出存储在PKCS12密钥库中的证书?


Answers:


146

如果密钥库是PKCS12类型(.pfx),则必须用进行指定-storetype PKCS12(添加了换行符以提高可读性):

keytool -list -v -keystore <path to keystore.pfx> \
    -storepass <password> \
    -storetype PKCS12

6
如果您更喜欢图形界面实用程序,则可以找到Keystore Explorer,它是Java命令行实用程序keytool,jarsigner和jadtool的开源GUI替代品。 keystore-explorer.sourceforge.net
大卫·加西亚·冈萨雷斯

感谢@David的提示。很高兴看到该项目仍然活跃,与其他许多此类项目不同!
约翰·里克斯

这个免费软件工具的绝佳技巧-我通常更喜欢命令行,但这非常好
大黄

1
应该与(.p12)一起使用吗?我知道了java.io.IOException: Invalid keystore format
IgniteCoders

这不适用于P12证书存储(2019年
Harald Coppoolse

29

您也可以openssl用来完成相同的事情:

$ 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

3
只是说它也适用于.p12文件。非常有帮助,谢谢!
Rich Ross

@PhilipRego确定可以,只需将它们用单引号引起来。
slm

我想看到别名aka friendlyname。必须使用“ openssl pkcs12 -nodes -in </path/to/file.pfx> -passin pass:<pfx的密码>”
Domo

3

您可以使用keytool列出条目(证书详细信息),甚至无需提及商店类型。

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

请考虑解释您的代码及其帮助方式,以便其他人可以从中受益。
阿米特·维尔玛

更新了答案。
哈里

2

问题和所有答案中都缺少的是,您可能需要密码才能从PKCS#12(.pfx)密钥库中读取公共数据。是否需要密码取决于PKCS#12文件的创建方式。如果PKCS#7数据(例如OID前缀1.2.840.113549.1.7)被列为“已加密”,则可以检查文件的ASN1结构(通过ASN1解析器运行它,openssl或certutil也可以这样做)。如果使用密码规范,或者如果asn1树中的数据位置在加密节点之下,那么您将无法在不知道密码短语的情况下读取它。这意味着您的“ openssl pkcs12”命令将因错误而失败(输出取决于版本)。对于那些想知道为什么您可能在不知道密码的情况下对PKCS#12的证书感兴趣的人。想象一下,您有许多密钥库和多个短语,并且您真的很难使它们井井有条,并且您不想测试所有组合,文件中的证书可以帮助您找出可能的密码。或者,您正在开发用于迁移/更新密钥库的软件,并且需要根据所包含的证书预先确定要启动哪个过程,而无需用户交互。因此,根据PKCS#12结构,后面的示例无需密码即可工作。或者,您正在开发用于迁移/更新密钥库的软件,并且需要根据所包含的证书预先确定要启动哪个过程,而无需用户交互。因此,根据PKCS#12结构,后面的示例无需密码即可工作。或者,您正在开发用于迁移/更新密钥库的软件,并且需要根据所包含的证书预先确定要启动哪个过程,而无需用户交互。因此,根据PKCS#12结构,后面的示例无需密码即可工作。

只是想补充一下,因为我自己没有找到答案,花了很多时间来弄清楚。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.