我有三個基於Java的Web應用程序app1,app2和app3在生產。所有3個都通過了驗證的CA的驗證,並託管在3個不同的Web服務器 和https上。 app1,app2通過安全trust.app3驗證通過trustwave驗證。javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路徑構建失敗:
下面是證書的證書層次結構,我可以看到當我通過網絡瀏覽器打開這些應用程序中的任何一個時。
APP1,APP2證書hirerarchy是相同.E
Entrust.net Secure Server Certification Authority---> SecureTrust CA------->*.myAppDomain.com
APP3證書hirerarchy是
Entrust.net Secure Server Certification Authority---> SecureTrust CA------->TrustWave Organization Validation CA, L------->*.myApp3.com
現在,當APP1連接到APP 2,做工精細。但是,當APP1連接到APP3變得異常下面
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
現在我對Web服務器託管APP1裏面JDK CACERT文件(即信任店)看看。我試圖找到Entrust,SecureTrust,TrustWave的條目,但只發現了像entrustevca,entrust2048ca等條目。所以,如果我按照邏輯推斷,如果根證書(它是應用程序app2和app3的Entrust)位於信任存儲區聯繫應用程序(app3),我可以在app3上看到cacert文件,然後當app1嘗試通過httpsURLConnection與app3聯繫時,我不應該得到上述錯誤。 我不知道這個原因?我不確定我們是否也需要包含trustwave,儘管根證書即Entrust已經在那裏內部驗證了trustwave?
如果我需要在CACERT文件(APP 2使用)上APP3然後通過這個邏輯我也應該inlcude在CACERT文件 securetrust(由APP 2使用)上APP3 trustwave證書,但它工作正常?
嗨EJP。當你說「客戶的信任庫不信任服務器的證書」。希望你的意思是webserver作爲客戶端而不是web瀏覽器作爲客戶端因爲當我在任何瀏覽器中點擊相同的網址時,它會爲證書提供任何警告或例外而獲得成功。根據我的理解,它正在發生,因爲我可以在瀏覽器受信任的根證書中找到Entrust.net安全服務器證書頒發機構的條目。 –
您還說過的另一點是「所以客戶端的信任庫中沒有可信任的CA證書與服務器提供的證書鏈中的任何內容匹配。」但是我可以在app1的cacert文件中找到entrustevca,entrust2048ca,其他委託相關條目[app3使用的根證書]的條目。所以當app1聯繫app3時,它不應該拋出異常。對? –
我的意思是您的應用程序中的任何元素是相關事務中的客戶端。當然這很明顯。如果服務器提供的鏈中存在由客戶端的信任庫所信任的證書,則不會得到此異常。埃爾戈沒有。 – EJP