11

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

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

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

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

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

4

4 回答 4

11

您需要一个信任库来存储 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());
于 2013-09-17T10:01:52.857 回答
3

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

顺便说一句,与 XML 无关。

于 2011-12-04T21:36:08.413 回答
2

你可以试试这个:

String javaHomePath = System.getProperty("java.home");
String keystore = javaHomePath + "/lib/security/cacerts";
String storepass= "changeit";
String storetype= "JKS";

String[][] props = {
    { "javax.net.ssl.trustStore", keystore, },
    { "javax.net.ssl.keyStore", keystore, },
    { "javax.net.ssl.keyStorePassword", storepass, },
    { "javax.net.ssl.keyStoreType", storetype, },
};
for (int i = 0; i < props.length; i++) {
    System.getProperties().setProperty(props[i][0], props[i][1]);
}
// Now you can proceed to connect to call the webservice.
// SSL will be used automatically if the service endpoint url 
// starts with <a href="https://." target="_blank"         rel="nofollow">https://.</a>
// The server will send its certificate signed by verisign and 
// client will trust and authenticate the server as it recognizes 
// verisign as one trusted root.
于 2015-12-30T19:16:24.877 回答
-3

在开发 Java 6 应用程序时,我的 MAC OSX (Yosemite) 遇到了同样的异常。您需要下载并安装 Apple 的 Java for OSX 2014:

http://support.apple.com/kb/DL1572

于 2015-01-04T23:48:02.210 回答