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

2022-09-04 21:14:51

我希望解析每天更新该文件的XML文件 - 我遇到的唯一问题是他们使用自己的证书(https://...),我不能使用该特定URL,也没有 http://...链接可用。

URL url = new URL("https://...");
...
Document document = db.parse(url.openStream());

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

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

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


答案 1

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

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

keytool -importcert -keystore secure.ts -storepass S3cuR3pas$! -file certificate.crt

现在,您必须告诉程序密钥库的位置和密码才能打开它,在打开连接之前定义系统属性“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());

答案 2

此奇怪的消息表示未找到信任库。

与XML BTW没有任何关系。