自簽證書:請求第三方自簽名https證書報錯:sun.security.validator.ValidatorException: PKIX path building failed


自簽證書:請求第三方自簽名https證書報錯:

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

 

 

 

使用 ssl 連接時,遇到不信任的證書,應用程序一般都會拒絕連接。

瀏覽網站時,我們可以通過在瀏覽器的設置中導入證書,把證書加入到信任列表中。

而在 JAVA 直接進行 SSL 連接應用時,默認沒有一個界面來導入證書。JAVA 進行不信任的 ssl 連接時,會報如下異常:

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

  

 

 

發現報錯后,才知道對方用的是自簽名證書。

於是向對方要了:server.cer 證書

 

原理:

Java 使用了一種叫 keystore 的文件來存儲證書 (默認是位於 $JAVA_HOME/lib/security/cacerts ) 。

該文件使用 keytool 工具去管理 (該工具默認位於 $JAVA_HOME/bin/keytool )。

keytool 工具的使用不在這里展開,網上有比較詳細的說明。這里主要列舉幾個會用到的命令。

列出 keystore 中的證書

keytool -list

  

默認情況下,它會在你的 $HOME 目錄下產生一個空的 .keystore 文件。如要指定 Java 正在用的 keystore 文件,使用以下參數

keytool -list -keystore $JAVA_HOME/lib/security/cacerts

  

注意一下, keystore 文件都受 密碼 保護。生成新的 keystore 文件時,會要求你輸入一個新密碼;而當訪問一個已有的 keystore 文件時,會要求你驗證密碼。

$JAVA_HOME/lib/security/cacerts 的默認密碼為 “changeit” !!!

$JAVA_HOME/lib/security/cacerts 的默認密碼為 “changeit” !!!

$JAVA_HOME/lib/security/cacerts 的默認密碼為 “changeit” !!!

重要的事情說三遍!!!

我的java環境目錄是:

/home/centos/jdk1.8.0_161

  

 

導入證書一:

keytool -import -alias <證書別名> -keystore $JAVA_HOME/jre/lib/security/cacerts -file your.crt

  

導入證書二:

我是進入到:/home/centos/jdk1.8.0_161/jre/lib/security,然后執行

/home/centos/jdk1.8.0_161/bin/keytool -import -alias payServer -keystore cacerts -file /root/server.cer

  

安裝時,請輸入:yes

 

 

最后一步

重啟web服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM