2010-10-20 18 views
1

使用自簽名證書在運行時提交(<xforms:submission>)通過HTTPS對服務器,我在看起來像日誌得到一個例外:使用Orbeon Forms,爲什麼我使用自簽名證書失敗提交給服務器?

ERROR XFormsServer - XForms - submission - xforms-submit-error throwable: sun.security.provider.certpath.SunCertPathBuilderException 
: unable to find valid certification path to requested target 
     at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174) 
     at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238) 
     at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280) 
     at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191) 

我怎樣才能解決這個問題?

回答

2

當發出HTTPS請求時,Java會檢查服務器的證書。由於證書是自簽名的,因此Java無法驗證它是否是合法證書,因此錯誤消息「無法找到請求目標的有效證書路徑」。

你需要做的是兩種:

  1. 使用一個 「真正」 的證書(例如由Verisign簽名)。
  2. 將服務器的證書添加到「信任存儲區」,並將應用程序服務器的JVM設置爲使用該信任存儲區。

做上述第2條將取決於您的環境的具體步驟,但在本質:

  1. 如果服務器處理的請求,在一個Java密鑰存儲的自簽名密鑰,出口它。這裏your-server是您的服務器密鑰存儲區的別名,mykey.cer是您要創建的文件,keystore是您的密鑰存儲區文件,而your-password是密鑰存儲區的密碼。

    keytool -export -alias your-server -file mykey.cer -keystore keystore -storepass your-password

  2. 在其上Orbeon形式運行(即發起的HTTPS請求的服務器),進口mykey.cer成信任存儲服務器。這裏truststore是您的信任存儲文件,如果您沒有現有的信任存儲,這可能是您創建的新文件。

    -Djavax.net.ssl.trustStore=path/to/your/truststore -Djavax.net.ssl.trustStorePassword=your-password

keytool -import -v -trustcacerts -alias your-server -file mykey.cer -keystore truststore -storepass your-password

  • 開始運行你的應用服務器(例如Tomcat)的和Orbeon形式的虛擬機時添加以下-D參數

  • 相關問題