Java客户端的SSL连接

6
我正在创建一个Java客户端程序,将向Tomcat服务器发送敏感信息。因此,我需要使用SSL连接以便信息得到加密。
我需要使用自签名的不受信任证书,但在从Java客户端建立连接时遇到了问题。
我已经成功设置Tomcat 5.5以使用SSL,并通过Firefox进行了测试,它显示了自签名证书的警告。
我按照Tomcat 5.5 SSL设置的步骤进行操作,并提到要创建一个密钥库:
keytool -genkey -alias tomcat -keyalg RSA
然后我导出了上面的内容:
keytool -export -keystore .keystore -alias tomcat -file localhost.cer 然后我将上述证书导入客户端机器:
keytool -import -alias tomcat -file localhost.cer -keystore "C:\Program Files"\Java\jdk1.6.0_17\jre\lib\security\cacerts"
但是当运行客户端时,我会收到以下错误:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
这是客户端代码:
URL url = new URL("https://localhost:8443");
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslsocketfactory);
InputStream inputstream = conn.getInputStream();

我今天刚开始接触这些证书,对密钥库不太熟悉,请耐心等待。

请问有人可以解释一下如何将在Tomcat中创建的证书导出并导入到客户端机器吗?

谢谢。


1
也许您导入了错误的证书,或者将其导入了错误的JRE。许多人在他们的计算机上有多个JRE。您应该列出cacerts的内容,并查看您的证书是否在其中。此外,您可以设置系统属性java.net.debug=all以查看有关发送和检查证书部分的更详细信息。 - President James K. Polk
3个回答

1

如果我完全禁用SSL证书验证,发送到服务器的数据是否仍将被加密? 我找到了一个不验证SSL证书的示例,但想确保数据传输仍将被加密。 - Marquinio
1
如果您禁用SSL验证,则SSL隧道仍将存在,数据仍将被加密。但是您将不再知道该隧道的终止位置!攻击者可以执行以下操作来破坏您的安全性:使用任意IP地址毒化您的DNS,为您正在连接的FQDN生成自签名的SSL证书,在毒化IP地址上侦听SSL并响应虚假的SSL证书。没有验证,您的SSL客户端将信任服务器的SSL证书,而不管它来自哪个CA。 - Ryan Fisher

0

1
能否解释一下为什么有人标记了负面评价?我已经使用了这个解决方案,它非常好用。 - Gladwin Burboz

0

我认为你应该使用"changeit"来输入密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接