1

尝试使用 keytool 转换 PFX 证书时:

keytool -importkeystore -srckeystore SomeCert.pfx -srcstoretype pkcs12 -srcstorepass SomePass -destkeystore SomeCert.jks -deststoretype jks -deststorepass SomePass 

我得到以下异常

keytool error: java.security.cert.CertificateParsingException: java.io.IOException: Duplicate extensions not allowed

此外,当使用码头的 PKCS12Import 工具时,如此处所述,我得到了同样的例外。

主要原因如下:

Caused by: java.io.IOException: Duplicate extensions not allowed
      at sun.security.x509.CertificateExtensions.parseExtension(CertificateExtensions.java:96)
      at sun.security.x509.CertificateExtensions.init(CertificateExtensions.java:70)
      at sun.security.x509.CertificateExtensions.<init>(CertificateExtensions.java:60)
      at sun.security.x509.X509CertInfo.parse(X509CertInfo.java:723)
      at sun.security.x509.X509CertInfo.<init>(X509CertInfo.java:152)
      ... 92 more

我正在使用 Windows 7,JDK 8u25_x64。

任何想法为什么会发生这种重复的扩展问题,以及如何解决?当我通过浏览器使用证书时(例如,通过 Firefox 访问某些 WS 的 WSDL 文件)它工作正常

4

1 回答 1

0

好的,所以我找到了从 PFX 转换为 JKS 的方法。

这是程序,以供将来参考:

步骤 1.将 pfx 转换为 pem

步骤 1.1。私钥

openssl pkcs12 -in SomeFile.pfx -nocerts -out privatekey.pem

步骤 1.2。证书

openssl pkcs12 -in SomeFile.pfx -clcerts -nokeys -out certificate.pem

步骤 2.创建密钥库

openssl pkcs12 -export -in certificate.pem -inkey privatekey.pem -certfile certificate.pem -name "some name" -out keystore.p12

步骤 3.创建 JKS 密钥库

keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -destkeystore JKS

为此,需要安装 OpenSSL,并将 Java 添加到 PATH(以便 keytool 命令可用)。

如果有人只需要将带有私钥的证书导入 Java 密钥库,请跳过第 1 步。

于 2014-12-01T15:28:40.800 回答