【问题标题】:How can I create a PFX file from a Java Keystore?如何从 Java 密钥库创建 PFX 文件?
【发布时间】:2010-10-06 08:53:39
【问题描述】:

我有一个持有单个证书的 Java 密钥库(.jks 文件)。如何从此密钥库创建 .pfx 文件?

【问题讨论】:

    标签: java .net certificate pfx jks


    【解决方案1】:

    这个家伙() 似乎已经编写了一个小的 Java 类和批处理文件,并在此处提供了很好的说明:http://www.crionics.com/products/opensource/faq/signFree.htm#DownloadTools

    如果你想自己做,.bat 文件中的关键行似乎是使用

    keytool -export -rfc -keystore %KEYSTORE% -storepass %PASSWORD% -alias %ALIAS% > %CERT_64%
    java -classpath %JAVACLASSPATH% ExportPrvKey %KEYSTORE% %PASSWORD% %ALIAS% > %PKEY_8%
    openssl enc -in %PKEY_8% -a >> %PKEY_64%
    openssl pkcs12 -inkey %PKEY_64% -in %CERT_64% -out %CERT_P12% -export
    

    ExportPrvKey 执行从密钥库中提取私钥的步骤。

    【讨论】:

    • 感谢您的回答。我还发现了您通过 Google 链接的网站并进行了尝试。但是,最后一步对我来说失败了。 openssl 以消息终止:无法加载私钥任何其他提示将不胜感激!
    • 查看私钥文件 (%PKEY_64%)。它真的存在吗?谷歌搜索似乎最常见的错误是将其放在错误的目录或格式错误。你有哪个版本的openssl?
    • PKEY_64 文件存在并且看起来没问题(它包含 858 个“随机”ascii 字符)。我在 linux 机器上使用 openssl 0.9.7d。
    【解决方案2】:

    【讨论】:

    • 这应该会得到更多的支持。这是最快的解决方案,点击次数最少,只需一点点 cmd 黑魔法,也是迄今为止我发现的唯一一个可以与多个 TrustedCertEntry 内部别名一起使用的解决方案。
    • 完美!分步指南。
    【解决方案3】:

    从 Java 6 开始,keytool 有一个 -importkeystore 选项,它应该能够将 JKS 存储转换为 PKCS#12 存储 (.p12/.pfx):

    keytool -importkeystore -srckeystore thekeystore.jks \
                -srcstoretype JKS \
                -destkeystore thekeystore.pfx \
                -deststoretype PKCS12
    

    它会要求您输入源和目标(jks、pfx)文件的密码

    【讨论】:

    • 使用此命令时出现以下错误:导入别名根条目时出现问题:java.security.KeyStoreException:不支持 TrustedCertEntry。你看到了吗?
    • @mikebz 是的,PKCS#12 存储中不能只有证书的条目,它只适用于还有私钥的条目。
    【解决方案4】:

    您可以使用以下命令导出包含私钥的 PFX 文件:

    keytool -importkeystore -deststorepass secret -destkeypass secret -destkeystore KEYSTOREFILE.jks -srckeystore PFXFILE.pfx -srcstoretype PKCS12 -srcstorepass secret
    

    【讨论】:

      【解决方案5】:

      keytool -importkeystore -srckeystore [MY_KEYSTORE.jks] -destkeystore [MY_FILE.p12] -srcstoretype JKS -deststoretype PKCS12

      然后它会请求你的密码和 BAM - 很好,昨晚刚试过效果很好。

      您可能必须先将 dir 更改为您的 java jdk 或 jre bin 文件夹,然后包含当前 Keystore 的完整路径和 dest .p12 文件。

      【讨论】: