![](/img/trans.png)
[英]PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[英]Fatal Error sun.security.validator PKIX path building failed
我之前已經遇到了這個問題,並通過更新JDK解決了問題。 早些時候,當我遇到此問題時,我使用的是Yum的默認安裝,后來我從oracle下載了JDK並進行了安裝,並按照新的安裝目錄更改了默認的$ JAVA_HOME路徑。 現在再次出現相同的問題,我已經在網上檢查了相關的帖子 ,找不到任何修復程序。
我們使用的示例代碼只是通過http或https進行的簡單身份驗證。
//Http client object
HttpClient client = new HttpClient();
HostConfiguration config = client.getHostConfiguration();
client.getParams().setParameter("http.socket.timeout", new Integer(100000));
String Url = 'https://example.com/';
PostMethod method = new PostMethod(Url);
//Handler to try for 3 attempt in case of network failure
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
//Here we are trying to connect through Httpclient method
int statusCode = client.executeMethod(method);
不知道是什么原因引起的。
keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 76 entries
我進行了更多測試,並重新安裝了jdk和tomcat,但仍然收到相同的錯誤。
Failure-Fatal transport error:
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
我按照URL上給出的說明進行操作:
java InstallCert services.example.com
Loading KeyStore jssecacerts...
Opening connection to services.example.com:443...
Starting SSL handshake...
No errors, certificate is already trusted
Server sent 1 certificate(s):
1 Subject CN=*.example.com, OU=Domain Control Validated, O=*.example.com
Issuer SERIALNUMBER=04343339, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
這表明證書已經添加到cacerts中。 現在,這變得越來越有趣。
后終於從成員所有的麻煩和幫助下,我得到了這個問題的修復程序。 如果將來有人遇到相同的問題,我將提供答案。
Server services.example.com使用的是通配符證書(在我的情況下),並且在SSL握手過程中未發送完整的證書(據我所知),這導致了此問題。
為了解決這種問題,我們需要將證書添加到java truststore“ cacerts”。
1:我從URL http://nodsw.com/blog/leeland/2006/12/06-no-more-unable-find-valid-certification-path-requested-target下載了Java代碼,並將此文件放在服務器在“ $ JAVA_HOME / jre / lib / security / cacerts”位置
2:我使用創建一個類文件的“ javac InstallCerts.java”編譯了代碼。
3:然后執行以下命令以添加服務器“ services.example.com”的證書
java InstallCert services.example.com
Enter certificate to add to trusted keystore or 'q' to quit: [1]
1
我輸入“ 1”將證書添加到信任文件“ jssecacerts”。
4:最后,我將文件“ cacerts”替換為文件“ jssecacerts”。 (注意:在替換之前先備份兩個文件)
mv cacerts cacerts-bkp-12-Feb-2013
cp –p jssecacerts cacerts
5:確認證書已添加到cacerts文件中。 要確認它,請執行以下命令:
keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts | grep example
Enter keystore password:
services.example.com-1, Feb 12, 2013, trustedCertEntry,
6:重新啟動相關服務並測試了該問題,此問題已得到解決。
您的信任庫不信任服務器證書。 它是自簽名的嗎? 您可能需要將其從服務器導出到信任庫中。
因此,也許有人會遇到這個問題,這是一個令人沮喪的問題,我花了兩天時間才能找到並解決。 問題在於,JVM不信任服務器的證書,因此,解決方案是將我們的Tomcat服務器和JVM配置為信任此站點。 因此,我將提及解決問題的所有步驟:
keytool -J-Duser.language = zh-CN -import -trustcacerts -alias somealiasexp -keystore cacerts-文件server_cert.crt
密碼是changeit,您應該在命令行中進行肯定確認。 要檢查是否已添加證書,請執行以下命令:
keytool-列表-keystore cacerts -alias somealiasexp
。 並且應該顯示證書。
設置JAVA_OPTS =“-Djavax.net.ssl.trustStore = C:/ Program Files / Java / jre1.8.0_151 / lib / security / cacerts”“ -Djavax.net.ssl.trustStorePassword = changeit”
keytool -genkey -alias tomcat -keyalg RSA -keystore tomcatkeystore.jks當執行此命令時,您將不得不設置密碼,假設它是“ some_password”。
keytool -certreq -keyalg RSA -alias tomcat-文件certtomcat.csr -keystore tomcatkeystore.jks
keytool -J-Duser.language = zh-CN -import -trustcacerts -alias somealias -keystore tomcatkeystore.jks-文件server_cert.crt
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="file:///C:/tomcatkeystore/tomcatkeystore.jks" keystorePass="some_password" />
要測試ssl端口是否配置正確,您應該能夠在鏈接“ https:// localhost ”中訪問tomcat接口,並為其添加一個例外。 就是這樣,我希望這對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.