2017-06-20 97 views
0

我正在使用我的應用程序中的外部Web服務。目前只有選定的IP地址列入白名單。現在,web服務建議在調用webservice時使用jks密鑰傳遞自簽名證書,以避免將白名單ip過程。基於認證的安全Web服務認證

web服務客戶端當前正在使用軸1.3 api。探索後,我想出keytool命令只調用服務

System.setProperty("javax.net.ssl.keyStore", "C:/migration/temp/keystore.jks"); 
System.setProperty("javax.net.ssl.keyStorePassword", "changeit"); 
System.setProperty("javax.net.ssl.keyStoreType", "JKS"); 
System.setProperty("javax.net.ssl.trustStore", "C:/migration/temp/cacerts.jks"); 
System.setProperty("javax.net.ssl.trustStoreType", "JKS"); 
System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 

之前產生JKS文件,並使用下面的代碼來設置JVM參數,但它沒有工作,而不是我得到了下面的異常

Thread- 1,調用closeSocket() 線程1,處理異常:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX路徑構建失敗:sun.security.provider.certpath.SunCertPathBuilderException:無法找到有效的 要求目標的認證路徑

我的問題是有任何其他方式來實現這一點。

+0

服務是否需要單向SSL或雙向SSL驗證? –

+0

錯誤是由於您必須信任服務器證書。在「C:/ migration/temp/cacerts.jks」中包含服務器證書的根CA.執行證書認證之前發生錯誤 – pedrofb

+0

其單向SSL。從SOAPUI或URLConnection調用時,我得到了正確的響應,沒有任何證書配置從相同的IP地址,未列入白名單 –

回答