2013-06-30 98 views
0

我想通過web服務發送一個xml到另一個系統。但是,當試圖發送我收到以下錯誤。我已經安裝了他們給我的證書。但仍然不起作用。獲取錯誤:PKIX路徑構建失敗:無法找到有效的證書路徑到要求的目標

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 
+1

你在哪裏安裝證書?它是一個自簽名證書嗎? – Avi

+0

@Avi:我已經在java keytool中安裝了證書。它不是自簽名證書。 –

回答

2

有此錯誤兩個可能的來源:

  • 任相反側使用真正不受信任的證書(自簽名或不可信CA簽名),
  • 或相反的一側是不發送證書驗證鏈(例如,沿着通往您的可信CA的途徑存在中間簽名證書,但此證書不在SSL握手中)。

解決方案對於第一種情況是(在ceriticate本身或)添加不受信任的CA到您的JRE信任庫(${java.home}/lib/security/cacerts)或更高 - 創建自己的信任(將Java時將不會被刪除),並提供通過javax.net.ssl.trustStore JVM屬性向您的應用程序發送消息。

第二種情況的解決方案是與第一個案例解決方案或更好 - 說服對方發送正確的證書鏈。

0

將證書添加到JRE truststore @ $ {java.home}/lib/security/cacerts或者如果您擁有自己的trustStore &可在您的應用程序/ JVM中提供路徑。例如,一個可能的方式可能是

or via java code

import java.util.Properties; 
... 
    Properties systemProps = System.getProperties(); 
    systemProps.put("javax.net.ssl.keyStorePassword","passwordForKeystore"); 
    systemProps.put("javax.net.ssl.keyStore","pathToKeystore.ks"); 
    systemProps.put("javax.net.ssl.trustStore", "pathToTruststore.ts"); 
    systemProps.put("javax.net.ssl.trustStorePassword","passwordForTrustStore"); 
    System.setProperties(systemProps); 
... 

更多參考信息在RedHat site

可能它會幫助參考question

相關問題