尝试使用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
此外,当使用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文件),它可以使用O.K。
答案 0 :(得分: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.