2010-02-10 225 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」輸入密碼。