2015-04-22 49 views
0
System.setProperty("javax.net.ssl.trustStore", "C:/tasks/MIP/Cert/ccc_acp.keystore"); 
System.setProperty("javax.net.ssl.trustStorePassword", "password"); 
System.setProperty("javax.net.debug", "ssl"); 

已經設置了信任,但是當電話使用HTTPS,仍然有錯誤收到致命警報:handshake_failure,已加入信任

javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure

整個錯誤信息很長,錯誤消息的最後部分是引述如下

主,WRITE:使用TLSv1變更密碼說明,長度= 1
***成品 verify_data:{204,151,145,147,圖7,73,205,158,73,238,129,8}


主,WRITE:使用TLSv1握手,長度= 32
主,READ:使用TLSv1異動,長度= 2
主,RECV的TLSv1 ALERT:致命的,handshake_failure
主,被叫則closesocket()
主,搬運異常:javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure java.lang .Exception:;嵌套的例外是: javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure

+1

什麼是你正在發送服務器的密碼套件,你和服務器可能不會共享/同意一個通用的chyper進行通信。您可以查看服務器證書以查看支持的密碼,並與發送後進行比較 –

回答

0

不知道是什麼原因,但如果我改變的setProperty從信任庫的keyStore,該工作方案!

System.setProperty("javax.net.ssl.keyStore", "C:/tasks/MIP/Cert/ccc_acp.keystore"); 
System.setProperty("javax.net.ssl.keyStorePassword", "password"); 

我不熟悉SSL,在GOOLGE,我找到密鑰庫僅用於服務器,但我的應用程序是一個客戶端調用服務器API,所以不知道爲什麼改變密鑰存儲和它會現在成功了,誰都可以解釋?

欲瞭解更多信息,我發現,如果我刪除所有System.setProperty(...),然後在控制檯中,我看到的keyStore是空的,但的trustStore不是,如下:

keyStore在:
倉庫類型是:JKS
密鑰庫提供的是:
初始化密鑰庫
型 初始化的KeyManager SunX509
的trustStore是:C:\ Program Files文件\的Java \ JRE6 \ lib \ security中\ cacerts中
trustStor e型是:JKS
的trustStore提供商:
初始化信任

爲什麼keyStore在空?

相關問題