javax.net.ssl.SSLException:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空

Ace*_*hen 11 java ssl jsse truststore

我正在寻找解析每天更新所述文件的XML文件 - 我遇到的唯一问题是他们使用自己的证书(https:// ..)并且我不能使用该特定URL,也不能是否有http:// ...链接可用.

URL url = new URL("https://...");
...
Document document = db.parse(url.openStream());
Run Code Online (Sandbox Code Playgroud)

此代码在运行我的测试时抛出以下异常:

javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空

我已经看到了各种建议,涉及创建各种类来处理这种连接或个人服务器,以及将证书添加到密钥库,然后将该密钥库添加到Java项目,但我一直在无法做到这一点,我正在寻找一种稍微简单的方式让我去在线访问XML.

小智 10

您需要一个信任库来存储SSL证书.您可以使用首选的Web浏览器下载证书.要将证书加载到信任库,您需要JDK附带的"keytool"程序.

例如,如果您的证书文件名为"certificate.crt",并且您要创建名为"secure.ts"的信任库,则可以按如下方式调用keytool:

keytool -importcert -keystore secure.ts -storepass S3cuR3pas$! -file certificate.crt
Run Code Online (Sandbox Code Playgroud)

现在,您必须告诉您的程序密钥库所在的位置以及打开它的密码,打开连接之前定义系统属性"javax.net.ssl.trustStore"和"javax.net.ssl.trustStorePassword"

URL url = new URL("https://...");

System.setProperty("javax.net.ssl.trustStore", "secure.ts");
System.setProperty("javax.net.ssl.trustStorePassword", "S3cuR3pas$!");
...
Document document = db.parse(url.openStream());
Run Code Online (Sandbox Code Playgroud)


use*_*421 3

这个奇怪的消息意味着未找到信任库。

顺便说一句,与 XML 没有任何关系。

  • @Acetaminophen 所以你的信任库不信任服务器的证书。所以它可能是自签名的。您需要将其导入到您的 cacerts 中,或更可能将您的 cacerts 复制到本地信任库中,将服务器证书导入其中,并将其用作信任库。请参阅 https://forums.oracle.com/forums/thread.jspa?threadID=2267111&tstart=0 了解可能的导入解决方案。最好的解决方案是让服务器使用由 CA 签名的证书。 (3认同)