2010-02-10 130 views
6

我正在创建一个将客户端敏感信息发送到Tomcat服务器的Java客户端程序。所以我需要使用SSL连接,因此信息将被加密。来自Java客户端的SSL连接

我需要使用自签名不受信任的证书,但有问题从java客户端进行连接。

我已成功设置Tomcat 5.5以使用SSL并通过Firefox进行测试,该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"

但是运行客户端时,我得到:

异常线程 “main” javax.net。 ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到要求的目标的有效证书路径

这是客户端代码:

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来查看有关证书发送和检查部分的更多详细信息。 – 2010-02-10 23:25:12

回答

1

Atlassian对如何解决这个问题有很好的指导。

http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services

另一种方法是安装较少的无情证书验证,但只应作为最后的手段。

+0

问题在于他看起来已经完成了这些步骤。 – 2010-02-10 23:33:05

+0

如果我完全禁用SSL认证验证,那么发送到服务器的数据仍然会被加密? 我发现了一个不验证SSL证书但希望确定数据传输是否仍会被加密的示例。 – Marquinio 2010-02-11 02:42:35

+1

如果您禁用SSL验证,SSL隧道仍将存在,并且数据仍将被加密。 **但是**你将不再知道隧道终止的地方!攻击者可以这样做来破坏您的安全:使用任意IP地址毒害您的DNS,为您正在连接的FQDN生成一个自签名SSL证书,在有毒IP地址上侦听SSL并以假SSL证书响应。无需验证您的SSL客户端就会信任服务器的SSL证书,无论它来自何处。 – 2010-04-13 22:47:55

0

使用Apache HTTP Cleint罐子并按照此SSL Guide

EasySSLProtocolSocketFactory可用于创建允许目标服务器使用自签名证书进行身份验证的SSL连接。

+1

负号的人可以解释为什么吗?我已经使用这个解决方案,它工作得很好。 – 2010-02-11 00:58:58

0

我认为你应该使用“changeit”输入密码。