【问题标题】:Java Application using Https Connection:"Connection refused error"使用 Https 连接的 Java 应用程序:“连接被拒绝错误”
【发布时间】:2012-04-16 21:00:42
【问题描述】:

我为我的 JavaAppliaction 创建了一个 jar。从这个应用程序中,我连接到 WebApplicaton 中的 servlet(我将名称和密码从 swing 传递到 servlet)(这里我只是在 servlet 中显示名称和密码)。

我正在通过 SSL 连接(Https)传递数据。它在我的系统中运行良好。但是当我尝试在另一个系统中运行 jar 时,我收到“连接被拒绝错误”。

注意:在另一个通过 http 连接传递数据的系统中运行 jar 工作正常。

我浏览了这个link,它建议我创建一个“jssecacerts”文件并将其粘贴到“另一个系统”的 $JAVA_HOME/jre/lib/security 文件夹中。但我仍然遇到同样的错误。为什么这不起作用??

【问题讨论】:

  • 你检查你的防火墙设置了吗?
  • @beny23:我已经粘贴了Stacktrace
  • @hage:是的,我的防火墙已关闭。但该系统还通过代理重定向所有流量。这会有什么影响吗??
  • 这可能是由于您的代理。如果尚未设置,您应该尝试设置以下系统属性: System.setProperty("java.net.useSystemProxies", String.valueOf(true)); System.setProperty("http.proxyHost", proxyHost); System.setProperty("https.proxyHost", sProxyHost); System.setProperty("http.proxyPort", String.valueOf(proxyPort));System.setProperty("https.proxyPort", String.valueOf(sProxyPort));如果您的代理需要身份验证,那么您还需要设置一个Authenticator

标签: java servlets https jar war


【解决方案1】:

一种可能的解决方案:尝试使用将公共证书导入 java 默认密钥库。

keytool -importcert -trustcacerts -file "path-to-public-cert" -keystore JAVA_HOME/jre/lib/security/cacerts

它会询问密钥库密码默认密钥库密码是“changeit”

您可以通过在网络浏览器(例如 chrome)中打开您的 URL 来获取公共证书 单击 URL 开头的图标 -> 单击证书信息 -> 详细信息选项卡 -> 单击导出 按钮。


更好的方法是:

  • 使用 JAVA_HOME/bin 中的“keytool”创建密钥库
  • 在此密钥库中导入您服务器的公共证书。
  • 将密钥库与您的应用程序捆绑在一起。
  • 制作一个 bat / sh 文件来运行您的 jar,为 java 命令 -Djavax.net.ssl.trustStore=/path-to-your-keystore 提供一个参数

因此,您的应用每次启动时都会使用此自定义密钥库。因此您不必在运行应用程序的每个系统上复制 jssecacerts 文件。

【讨论】:

  • 感谢您提供帮助。但我猜这不是他正在寻找的答案。他是在寻求另一个问题的解决方案,对吗?另外我还有另一个问题:粘贴 jssacerts 是否与您尝试使用脚本自动化的操作相同吗??
  • 是的,我试图消除复制 jssacerts 的步骤。编辑帖子添加了一个可能的解决方案。
  • "java 无法找到与服务器通信的公共证书" 这是一种非常不精确的表达方式。该错误表明客户端的信任库不信任服务器的密钥库。您的解决方案是正确的:您的问题陈述不正确。
  • @amitp: 我已经使用这个命令在我的系统中创建了一个证书:keytool -export -file test.cert -keystore test -storepass 123456 -alias sriram Ans: 证书存储在文件 .我已经使用上面指定的命令在新系统的 cacerts 中导入了这个证书。输出是这样的:信任这个证书? [否]:是证书已添加到密钥库。但是当我在新系统中运行我的 jar 文件时,我仍然遇到同样的错误……我哪里出错了??
  • 您在 keytool 命令中创建了一个名为 test 的单独“密钥库”。在我的帖子中,我指定了默认 java 密钥库的路径,因此将证书添加到默认密钥库中。但是在运行 Jar 文件时不用担心,您可以明确指定密钥库文件的路径,正如我在原始帖子的最后一行中所写的那样。 java -jar -Djavax.net.ssl.trustStore= 您可以使用上述命令创建一个批处理文件来运行您的 Jar。这是通过您的 APP 运送您的密钥库的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
相关资源
最近更新 更多