【问题标题】:How to list the certificates stored in a PKCS12 keystore with keytool?如何使用 keytool 列出存储在 PKCS12 密钥库中的证书?
【发布时间】:2012-12-31 18:21:46
【问题描述】:

我想列出存储在 PKCS12 密钥库中的证书。

密钥库的扩展名为.pfx

【问题讨论】:

    标签: certificate ssl-certificate keystore pkcs#12


    【解决方案1】:

    如果密钥库是 PKCS12 类型 (.pfx),您必须使用 -storetype PKCS12 指定它(为便于阅读添加了换行符):

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

    【讨论】:

    • 如果您更喜欢图形界面实用程序,我找到了 Keystore Explorer,它是 Java 命令行实用程序 keytool、jarsigner 和 jadtool 的开源 GUI 替代品。 keystore-explorer.sourceforge.net
    • 感谢@David 的提示。很高兴看到该项目仍然活跃,与许多其他此类项目不同!
    • 该免费软件工具的绝妙技巧 - 我通常更喜欢命令行,但这非常好
    • 应该与 (.p12) 一起使用吗?我得到java.io.IOException: Invalid keystore format
    • 这不适用于 P12 证书存储(2019 年 3 月,最新 KeyTool 版本)
    【解决方案2】:

    你也可以使用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
    

    【讨论】:

    • 只是说它也适用于 .p12 文件。很有帮助,谢谢!
    • @PhilipRego 当然可以,只需将它们用单引号括起来。
    • 我想看看别名又名friendlyname。必须使用“openssl pkcs12 -nodes -in /to/file.pfx> -passin pass:
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
      openssl pkcs12 -info -in keystore_file
      

      【讨论】:

        【解决方案5】:

        您可以使用 keytool 列出条目(证书详细信息),甚至不需要提及商店类型。此外,.p12.pfx 都是 PKCS#12 文件。假设您有密钥库文件cert.pfxcert.p12,那么您可以使用以下命令列出内容。

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

        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
        

        【讨论】:

        • 请考虑解释您的代码以及它将如何提供帮助,以便其他人可以从中受益。
        猜你喜欢
        • 2012-12-31
        • 2015-09-22
        • 2012-10-23
        • 2017-07-23
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        相关资源
        最近更新 更多