linux系统中java的cacerts的优先级详解

2025-09-28 13:50

本文主要是介绍linux系统中java的cacerts的优先级详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式...

了解 Java 信任库(cacerts)的关系和优先级确实很重要,这关系到你的应用能否正确验证 SSL/TLS 证书。

简单来说,Java 默认会使用其自有 JRE 目录下的 cacerts 文件

下面的表格汇总了它们的核心区别和特点:

特性JDK 自带 cacerts系统扩展 Java cacerts
路径示例/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/lib/security/cacandroiderts/etc/pki/ca-tChina编程rust/extracted/java/cacerts
维护方JDK 提供商 (如 oracle, OpenJDK)操作系统 (如 Red Hat, Centos, Fedora 通过 ca-certificates 包维护)
更新方式JDK 更新或手动使用 keytool系统包管理器 (如 yum update ca-certificates) 或通过 update-ca-trust 命令
主要用途Java 运行环境 (JRE) 默认的信任库为系统上所有 Java 实例提供一个统一、集中管理的信任源,确保不同 JDK/JRE 都使用相同的证书列表。
优先级高 (Java默认使用它)低 (除非Java程序显式指定)
关系基础信任库旨在同步或替代JDK自带信任库,提供一致性。

Java编程China编程 默认使用哪个?

Java 虚拟机 (JVM) 在启动时,默认会使用其所在 JRE 目录下的 cacerts 文件,即你例子中的

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/lib/security/cacerts

这是 Java 的标准行为。

若要让 Java 使用系统的www.chinasem.cn

/etc/pki/ca-trust/extracted/java/cacerts​​​​​​​

通常需要在启动 Java 程序时显式指定系统属性:

java -Djavax.net.ssl.trustStore=/etc/pki/ca-trust/extracted/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit -jar your_application.jar

(注意:changeit 是默认密码,请根据实际情况修改)

如何检查当前使用的信任库?

如果想知道某个正在运行的 Java 进程实际使用的是哪个信任库,可以使用以下命令。确保 jcmd 的版本与目标 Java 进程的版本一致

# 首先,找到你的Java进程的PID
jps -l

# 然后,使用jcmd查看该进程的SSL属性(将YOUR_PID替换为实际的进程ID)
jcmd YOUR_PID VM.system_properties | grep javax.net.ssl.trustStore

操作建议

  1. 保持同步更新:为了避免困惑和潜在的SSL验证问题,建议定期将系统信任库中的证书同步到JDK的信任库中,或者反之(取决于你的管理策略)。对于 RHEL/CentOS/Fedora 等系统,在通过 yum update ca-certificates 更新系统证书后,系统级的 /etc/pki/ca-trust/extracted/java/cacerts 会自动更新。你可能需要手动将更改同步到其他JDK的信任库中,或配置应用使用系统的信任库。
  2. 为特定应用指定信任库:如果某个应用需要特殊的证书信任策略,最佳实践是在启动该应用时通过命令行参数 (-Djavax.net.ssl.trustStore=...) 为其指定一个独立的信任库文件,而不是修改全局的默认信任库。

简要了解Java的信任库

Java 维护着一个存放可信任证书颁发机构 (CA) 证书的文件,称js为“信任库” (TrustStore),默认通常是 cacerts 文件。

当 Java 应用程序(如 Maven、Spring Boot 应用或任何使用 HTTPS 的服务)尝试建立加密连接时,会使用这个信任库来验证服务器证书是否由可信的 CA 签发。

若验证失败(例如服务器证书不在信任库中、证书过期或主机名不匹配),就会抛出 SSLHandshakeException

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于linux系统中java的cacerts的优先级详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156074

相关文章

Java8 Collectors.toMap() 的两种用法

《Java8Collectors.toMap()的两种用法》Collectors.toMap():JDK8中提供,用于将Stream流转换为Map,本文给大家介绍Java8Collector... 目录一、简单介绍用法1:根据某一属性,对对象的实例或属性做映射用法2:根据某一属性,对对象集合进行去重二、Du

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常