JRE 導(dǎo)入 StartSSL 證書

0x00 緒言

通過 java 執(zhí)行 https 請求時可能出現(xiàn)以下錯誤:

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

這是因為 java 在執(zhí)行 SSL/TLS 通訊時使用特定的數(shù)據(jù)識別 Certificate Authorities(CA),如果你試圖發(fā)起的 SSL/TLS 連接使用不屬于這些根證書機(jī)構(gòu)所頒發(fā)的證書,就會拋出

SunCertPathBuilderException: unable to find valid certification path to requested target

因此,如果你使用自簽名證書,或者根證書機(jī)構(gòu)不在 JRE 默認(rèn)信任列表中,則需要向 JRE 導(dǎo)入根證書。

最近我們有個項目使用了沃通的免費 SSL 證書,因其根證書屬于 StartSSL 并不在 JRE 默認(rèn)信任列表中,因此簡單記錄下導(dǎo)入過程。

0x01 導(dǎo)入根證書到 JRE

首先,我們需要獲取根證書:

mkdir ~/tmp
cd ~/tmp

curl http://www.startssl.com/certs/ca.crt -O
curl http://www.startssl.com/certs/sub.class1.server.ca.crt -O
curl http://www.startssl.com/certs/sub.class2.server.ca.crt -O
curl http://www.startssl.com/certs/sub.class3.server.ca.crt -O
curl http://www.startssl.com/certs/sub.class4.server.ca.crt -O

然后,將證書導(dǎo)入到 JRE 信任列表:

sudo keytool -import -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca -file ca.crt

sudo keytool -import -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca.sub.class1 -file sub.class1.server.ca.crt

sudo keytool -import -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca.sub.class2 -file sub.class2.server.ca.crt

sudo keytool -import -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca.sub.class3 -file sub.class3.server.ca.crt

sudo keytool -import -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -noprompt -alias startcom.ca.sub.class4 -file sub.class4.server.ca.crt

別奇怪,"changeit" 只是個默認(rèn)密碼而已。

最后,驗證一下導(dǎo)入是否成功:

keytool -keystore "/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts" -storepass changeit -list | grep start

輸出:

startcom.ca, 2015-11-3, trustedCertEntry,
startcom.ca.sub.class4, 2015-11-3, trustedCertEntry,
startcom.ca.sub.class3, 2015-11-3, trustedCertEntry,
startcom.ca.sub.class2, 2015-11-3, trustedCertEntry,
startcom.ca.sub.class1, 2015-11-3, trustedCertEntry,

It's OK!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 原文: 高性能網(wǎng)絡(luò)瀏覽器-第四章傳輸層安全性(Transport Layer Security,TLS) 翻譯: ...
    夢很想家閱讀 4,730評論 2 6
  • 根證書含義 - 孤舟蓑笠翁,獨釣寒江雪 - 博客頻道 - CSDN.NET 本文想簡單談?wù)勀莻€所謂的...
    拉肚閱讀 2,428評論 0 1
  • 目錄 準(zhǔn)備 分析2.1. 三次握手2.2. 創(chuàng)建 HTTP 代理(非必要)2.3. TLS/SSL 握手2.4. ...
    RunAlgorithm閱讀 38,625評論 12 117
  • 沒有什么比心累還累的了,我想我應(yīng)該先放下一段時間了。不管她了,過好自己的生活吧,離開了誰地球都照樣轉(zhuǎn),為什么我就不...
    下午茶咖啡閱讀 213評論 0 0