尝试使用 key 工具转换 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
此外,当使用 jetty 的 PKCS12Import 工具时,as described here ,我得到了同样的异常。
主要原因是:
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 文件)它工作正常。
最佳答案
好的,所以我找到了从 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 步。创建 keystore
openssl pkcs12 -export -in certificate.pem -inkey privatekey.pem -certfile certificate.pem -name "some name" -out keystore.p12
第 3 步。创建 JKS keystore
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -destkeystore JKS
为此,需要安装 OpenSSL,并将 Java 添加到 PATH(以便 keytool 命令可用)。
如果有人只需要将带有私钥的证书导入 Java keystore ,请跳过第 1 步。
关于java - 将 PFX 证书转换为 JKS 会出现 "Duplicate extensions not allowed"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189648/