[英]java raises an SSLHandshakeException even if the root certificate in the trust store
以下java代碼:
new URL("https://www.limagrain.com/").openStream()
引發以下錯誤:
javax.net.ssl.SSLHandshakeException thrown: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
但是,此站點使用的根證書( Thawte Primary Root CA-G3 )存在於java的信任庫中,並且該站點在瀏覽器中顯示沒有問題。
在Qualys上檢查站點SSL檢查器會發出有關標記為額外下載的中間證書的警告。
如何讓java自動下載中間證書?
因為,您正在使用安全通道https。 只是,根證書是不夠的。 您需要擁有Root和CA或完整的證書鏈。
部分 - 我
支持管理局信息訪問(AIA)擴展
可以使用對Authority Information Access擴展的caIssuers訪問方法的支持。 默認情況下,它是為了兼容性而禁用的,可以通過將系統屬性com.sun.security.enableAIAcaIssuers設置為值true來啟用它。
如果設置為true,則Sun的CertIXBuilder的PKIX實現使用證書的AIA擴展(除指定的CertStore之外)中的信息來查找頒發的CA證書,前提是它是類型為ldap,http或ftp的URI。
注意:根據您的網絡和防火牆設置,可能還需要按照[網絡文檔( http://docs.oracle.com/javase/8/docs/technotes/guides/net)中的說明配置網絡代理服務器。 /properties.html )。
第二部分
以下是如何手動導入java證書中的證書鏈的步驟
轉至command.exe中的%JAVA_HOME%/ jre / lib / security
使用以下命令導入證書鏈。
keytool -importcert -file limagrain.cer -alias limagrain -keystore cacerts -storepass changeit
注意:確保證書路徑正確。
將系統屬性com.sun.security.enableAIAcaIssuers
設置為true
。
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
請參閱Oracle的Java PKI指南: https : //docs.oracle.com/javase/7/docs/technotes/guides/security/certpath/CertPathProgGuide.html#AppB 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.