【发布时间】:2009-02-11 14:32:29
【问题描述】:
我有一个 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
请帮忙。
【问题讨论】:
-
如果您可以发布更多堆栈跟踪信息(来自堆栈帧的信息,而不仅仅是异常消息),我会看看它。
-
要检查的另一件事是您的信任存储位置是否正确指定;如果指定了 javax.net.ssl.trustStore 但不存在,则会即时创建一个空的信任库。您的新错误消息表明这可能正在发生。