我有一个pkcs12文件.我需要使用它来使用https协议连接到网页.我遇到了一些代码,为了连接到安全的网页,我需要设置以下系统属性:
System.setProperty("javax.net.ssl.trustStore", "myTrustStore"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); System.setProperty("javax.net.ssl.keyStoreType", "pkcs12"); System.setProperty("javax.net.ssl.keyStore", "new_cert.p12"); System.setProperty("javax.net.ssl.keyStorePassword", "newpass");
我有p12(pkcs12)文件.我只需要一个信任库文件.
我使用以下方法提取证书:
openssl.exe pkcs12 -in c:/mykey.p12 -out c:/cert.txt -nokeys -clcerts
现在将证书PEM文件转换为der
openssl.exe x509 -in c:/cert.txt -outform DER -out c:/CAcert.der
现在将der文件添加到密钥库
keytool -import -file C:/Cacert.der -keystore mytruststore
现在我有了信任库,但是当我使用它时,我收到以下错误
Exception in thread "main" java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
更新:删除某些属性并仅设置"trustStore","trustStorePassword"和"trustStoreType"属性后,我得到以下异常
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
请帮忙.
对于遇到类似情况的任何人,我能够解决上面的问题,如下所示:
重新生成pkcs12文件,如下所示:
openssl pkcs12 -in oldpkcs.p12 -out keys -passout pass:tmp openssl pkcs12 -in keys -export -out new.p12 -passin pass:tmp -passout pass:newpasswd
从导入服务器的CA证书导入信任库(无论是你自己,还是在Java密钥库$JAVA_HOME/jre/lib/security/cacerts
,密码:changeit
).
设置以下系统属性:
System.setProperty("javax.net.ssl.trustStore", "myTrustStore"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); System.setProperty("javax.net.ssl.keyStoreType", "pkcs12"); System.setProperty("javax.net.ssl.keyStore", "new.p12"); System.setProperty("javax.net.ssl.keyStorePassword", "newpasswd");
测试你的网址.
礼貌@ http://forums.sun.com/thread.jspa?threadID=5296333
由于50ps阈值,我无法评论,但我不认为/sf/ask/17360801/中提供的答案是正确的.您实际描述的是如何将服务器证书插入系统默认信任库:
$JAVA_HOME/jre/lib/security/cacerts, password: changeit)
这确实有效,但这意味着您没有真正指定项目本地的信任存储,而是在系统中普遍接受该证书.
您实际上从未使用您在此处定义的自己的信任库:
System.setProperty("javax.net.ssl.trustStore", "myTrustStore"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit");