使用Https连接的Java应用程序;“连接被拒绝错误”;

使用Https连接的Java应用程序;“连接被拒绝错误”;,java,servlets,https,jar,war,Java,Servlets,Https,Jar,War,我已经为我的JavaAppliaction创建了一个jar。从这个应用程序中,我连接到WebApplicaton中的servlet(我将名称和密码从swing传递到servlet)(这里我只是在servlet中显示名称和密码) 我通过SSL连接(Https)传递数据。它在我的系统中运行良好,但当我试图在另一个系统中运行jar时,我得到了“连接拒绝错误” 注意:在另一个通过http连接传递数据的系统中运行jar可以正常工作 我经历了这个过程,建议我创建一个“jssecacerts”文件,并将其粘贴

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

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

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


我经历了这个过程,建议我创建一个“jssecacerts”文件,并将其粘贴到“另一个系统”的$JAVA_HOME/jre/lib/security文件夹中。但我还是犯了同样的错误。为什么这不起作用?

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

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

它将请求密钥库密码默认密钥库密码为“changeit”

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


更好的办法是:

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

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

您检查了防火墙设置吗?@beny23:我已粘贴了@hage:是的,我的防火墙已关闭。但系统也通过代理重定向了所有流量。这会有任何影响吗?这可能是由于你的代理。如果尚未设置以下系统属性,则应尝试设置这些属性:system.setProperty(“java.net.useSystemProxies”,String.valueOf(true));System.setProperty(“http.proxyHost”,proxyHost);System.setProperty(“https.proxyHost”,sProxyHost);set属性(“http.proxyPort”,String.valueOf(proxyPort));System.setProperty(“https.proxyPort”,String.valueOf(sProxyPort));如果您的代理需要身份验证,那么您还需要设置一个
身份验证程序
我很感谢您的帮助。但我猜这不是他想要的答案。他在要求解决另一个问题,对吗?我还有另一个问题:粘贴jssacerts是否与您试图用脚本自动执行的操作相同?是的,我试图消除复制jssacerts的步骤。编辑后的帖子添加了一个可能的解决方案。“java无法找到与服务器通信的公共证书”,这是一种非常不精确的表达方式。该错误表示客户端的信任库不信任服务器的密钥库。您的解决方案是正确的:您的问题陈述不是。@amitp:我已使用以下命令在我的系统中创建了一个证书:keytool-export-file test.cert-keystore test-storepass 123456-alias sriram Ans:certificate存储在文件中。我已使用上面指定的命令将此证书导入新系统的cacerts中。输出为类似这样的内容:信任此证书?[否]:是的,证书已添加到密钥库..但在新系统中运行jar文件时仍会遇到相同的错误..哪里出了问题?您已在keytool命令中创建了一个名为test的单独“密钥库”。我在我的帖子中指定了默认java密钥库的路径,因此证书被添加到默认密钥库中。但运行Jar文件时不用担心,您可以显式指定密钥库文件的路径,正如我在orignal post的最后一行中所写的那样。java-jar-Djavax.net.ssl.trustStore=您可以使用上面的命令创建一个批处理文件来运行jar。这是使用应用程序发布密钥库的方法。