linux系統(tǒng)中java的cacerts的優(yōu)先級詳解
了解 Java 信任庫(cacerts)的關(guān)系和優(yōu)先級確實(shí)很重要,這關(guān)系到你的應(yīng)用能否正確驗(yàn)證 SSL/TLS 證書。
簡單來說,Java 默認(rèn)會(huì)使用其自有 JRE 目錄下的 cacerts 文件。
下面的表格匯總了它們的核心區(qū)別和特點(diǎn):
| 特性 | JDK 自帶 cacerts | 系統(tǒng)擴(kuò)展 Java cacerts |
|---|---|---|
| 路徑示例 | /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/lib/security/cacerts | /etc/pki/ca-trust/extracted/java/cacerts |
| 維護(hù)方 | JDK 提供商 (如 Oracle, OpenJDK) | 操作系統(tǒng) (如 Red Hat, CentOS, Fedora 通過 ca-certificates 包維護(hù)) |
| 更新方式 | JDK 更新或手動(dòng)使用 keytool | 系統(tǒng)包管理器 (如 yum update ca-certificates) 或通過 update-ca-trust 命令 |
| 主要用途 | Java 運(yùn)行環(huán)境 (JRE) 默認(rèn)的信任庫 | 為系統(tǒng)上所有 Java 實(shí)例提供一個(gè)統(tǒng)一、集中管理的信任源,確保不同 JDK/JRE 都使用相同的證書列表。 |
| 優(yōu)先級 | 高 (Java默認(rèn)使用它) | 低 (除非Java程序顯式指定) |
| 關(guān)系 | 基礎(chǔ)信任庫 | 旨在同步或替代JDK自帶信任庫,提供一致性。 |
Java 默認(rèn)使用哪個(gè)?
Java 虛擬機(jī) (JVM) 在啟動(dòng)時(shí),默認(rèn)會(huì)使用其所在 JRE 目錄下的 cacerts 文件,即你例子中的
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/lib/security/cacerts
這是 Java 的標(biāo)準(zhǔn)行為。
若要讓 Java 使用系統(tǒng)的
/etc/pki/ca-trust/extracted/java/cacerts???????
通常需要在啟動(dòng) Java 程序時(shí)顯式指定系統(tǒng)屬性:
java -Djavax.net.ssl.trustStore=/etc/pki/ca-trust/extracted/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit -jar your_application.jar
(注意:changeit 是默認(rèn)密碼,請根據(jù)實(shí)際情況修改)
如何檢查當(dāng)前使用的信任庫?
如果想知道某個(gè)正在運(yùn)行的 Java 進(jìn)程實(shí)際使用的是哪個(gè)信任庫,可以使用以下命令。確保 jcmd 的版本與目標(biāo) Java 進(jìn)程的版本一致。
# 首先,找到你的Java進(jìn)程的PID jps -l # 然后,使用jcmd查看該進(jìn)程的SSL屬性(將YOUR_PID替換為實(shí)際的進(jìn)程ID) jcmd YOUR_PID VM.system_properties | grep javax.net.ssl.trustStore
操作建議
- 保持同步更新:為了避免困惑和潛在的SSL驗(yàn)證問題,建議定期將系統(tǒng)信任庫中的證書同步到JDK的信任庫中,或者反之(取決于你的管理策略)。對于 RHEL/CentOS/Fedora 等系統(tǒng),在通過
yum update ca-certificates更新系統(tǒng)證書后,系統(tǒng)級的/etc/pki/ca-trust/extracted/java/cacerts會(huì)自動(dòng)更新。你可能需要手動(dòng)將更改同步到其他JDK的信任庫中,或配置應(yīng)用使用系統(tǒng)的信任庫。 - 為特定應(yīng)用指定信任庫:如果某個(gè)應(yīng)用需要特殊的證書信任策略,最佳實(shí)踐是在啟動(dòng)該應(yīng)用時(shí)通過命令行參數(shù) (
-Djavax.net.ssl.trustStore=...) 為其指定一個(gè)獨(dú)立的信任庫文件,而不是修改全局的默認(rèn)信任庫。
簡要了解Java的信任庫
Java 維護(hù)著一個(gè)存放可信任證書頒發(fā)機(jī)構(gòu) (CA) 證書的文件,稱為“信任庫” (TrustStore),默認(rèn)通常是 cacerts 文件。
當(dāng) Java 應(yīng)用程序(如 Maven、Spring Boot 應(yīng)用或任何使用 HTTPS 的服務(wù))嘗試建立加密連接時(shí),會(huì)使用這個(gè)信任庫來驗(yàn)證服務(wù)器證書是否由可信的 CA 簽發(fā)。
若驗(yàn)證失?。ɡ绶?wù)器證書不在信任庫中、證書過期或主機(jī)名不匹配),就會(huì)拋出 SSLHandshakeException。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
linux corosync+pacemaker+drbd+mysql配置安裝詳解
這篇文章主要介紹了corosync+pacemaker+drbd+mysql配置安裝詳解,需要的朋友可以參考下2016-05-05
VirtualBox 未指定要bridged的網(wǎng)絡(luò)界面的解決辦法
這篇文章主要介紹了VirtualBox 未指定要bridged的網(wǎng)絡(luò)界面的解決辦法的相關(guān)資料,希望通過本文能幫助到大家,讓大家解決遇到這樣的問題,需要的朋友可以參考下2017-10-10
Linux 命令查詢小程序中的 WePY 云開發(fā)實(shí)踐
這篇文章主要介紹了云開發(fā)與 WePY,快速實(shí)現(xiàn) Linux 命令查詢小程序,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Linux執(zhí)行可執(zhí)行文件提示No such file or directory的解決方法
這篇文章主要介紹了Linux執(zhí)行可執(zhí)行文件提示No such file or directory的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
linux 配置本地yum源,配置國內(nèi)yum源,配置epel源的步驟
這篇文章主要介紹了linux 配置本地yum源,配置國內(nèi)yum源,配置epel源的步驟,幫助大家更好的配置服務(wù)器,感興趣的朋友可以了解下2020-12-12

