发布到HTTPS网站时获取“InvalidAlgorithmParameterException”

时间:2013-05-12 15:52:53

标签: java jsp keystore sslexception

我尝试使用以下jsp代码将数据发布到支付网关网站:

System.setProperty("javax.net.ssl.trustStore ","C:\\Program Files\\Java\\jdk1.7.0_17\\jre\\lib\\security\\cacerts");\
System.setProperty("javax.net.ssl.trustStorePassword","changeit");

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

HttpURLConnection connection = (HttpURLConnection) server.openConnection();

connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("content-type","application/x-www-form-urlencoded");

connection.connect();

OutputStream os = connection.getOutputStream();
os.write(checkRequestByte);
os.close();

我已使用此命令将 .cer 文件添加到java密钥库:

  

keytool -importcert -file" path / certFile.cer" -keystore " Java / jre7 / lib / security / cacerts" -alias" Alias"

我也试过这个:

  

keytool -importcert -file" path / certFile.cer" -keystore " Java / jdk1.7.0_17 / jre / lib / security / cacerts" -alias" Alias"

在这两种情况下我都收到了这样的信息:

  

证书已添加到密钥库

但是当我运行它并打开页面时,我收到以下错误:

org.apache.jasper.JasperException: An exception occurred processing JSP page /process.jsp at line 36

33:     connection.setDoOutput(true);
34:     connection.setRequestProperty("content-type","application/x-www-form-urlencoded");
35: 
36:     connection.connect();
37: 
38:     OutputStream os = connection.getOutputStream();
39:     os.write(checkRequestByte);

javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty ...

我很困惑,我以前从未遇到过...... 感谢您的评论

2 个答案:

答案 0 :(得分:0)

解决方案非常简单:D,我重新启动了tomcat,现在它就像魅力一样;)

答案 1 :(得分:0)

我遇到类似问题,tomcat抛出InvalidAlgorithmParameterException。

 -Djavax.net.ssl.trustStore=/path/to/cacerts

并将站点的证书安装到信任库中,但https连接不起作用。最后我在eclipse中为

设置了一个异常断点
java.security.InvalidAlgorithmParameterException, 

然后在使用此代码段抛出异常时使用eclipse中的表达式视图检查系统属性:

System.getProperty("javax.net.ssl.trustStore")

我看到此trustStore位置的值已在运行时的其他位置更改为与我配置的-Djavax ... trustStore路径不同的路径。

我希望这可以帮助有人找出trustStore的配置位置,并且可以在运行时将其更改为其他内容。该错误应该真实地反映出加载trustStore所尝试的路径。