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

 更新时间:2025年09月28日 10:13:23   作者:大囚长  
文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式指定,建议保持证书同步以避免SSL验证问题,或为特定应用配置独立信任库

了解 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/cacerts/etc/pki/ca-trust/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 默认使用哪个?

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 使用系统的

/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) 证书的文件,称为“信任库” (TrustStore),默认通常是 cacerts 文件。

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • linux命令:echo使用解读

    linux命令:echo使用解读

    这篇文章主要介绍了linux命令之关于echo的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Linux各个目录的基本定义详解

    Linux各个目录的基本定义详解

    Linux文件系统包含根目录、启动文件、配置文件、可执行程序、库文件、可变数据等主要目录,各目录承担特定功能,有助于系统管理和维护
    2025-08-08
  • 阿里云linux服务器下安装Apache的简单方法

    阿里云linux服务器下安装Apache的简单方法

    本文介绍下,在阿里云的linux服务器上,安装apache的简单方法,需要的朋友可以参考下
    2014-05-05
  • Linux进程排查实战之strace和lsof命令使用指南

    Linux进程排查实战之strace和lsof命令使用指南

    这篇文章主要为大家详细介绍了Linux进程排查实战之strace和lsof命令使用的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-12-12
  • Linux中的ls -l命令展示信息

    Linux中的ls -l命令展示信息

    这篇文章主要介绍了Linux中的ls -l命令展示信息,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • windows10 更新Ubuntu20.04 LTS的方法步骤

    windows10 更新Ubuntu20.04 LTS的方法步骤

    这篇文章主要介绍了windows10 更新Ubuntu20.04 LTS的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • linux中SUID,SGID与SBIT的奇妙用途详解

    linux中SUID,SGID与SBIT的奇妙用途详解

    这篇文章主要给大家介绍了关于linux中SUID,SGID与SBIT的奇妙用途的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用linux具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2018-09-09
  • Ubuntu 16.04安装Apache Tomcat的方法

    Ubuntu 16.04安装Apache Tomcat的方法

    Apache Tomcat是Java Servlet和Java Server Pages技术的开源软件实现。可以使用OpenJDK tomcat运行你的Java应用。Apache Tomcat安装方法大家都不是很清楚,下面小编给大家介绍下Ubuntu 16.04安装Apache Tomcat的方法
    2016-10-10
  • Linux系统查看当前网络连接数的方法小结

    Linux系统查看当前网络连接数的方法小结

    在日常的运维和开发中,网络连接数的监控是一个非常重要的指标,当你需要排查网络问题或优化系统性能时,查看连接数是关键的一步,不同的 Linux 环境和发行版可能需要使用不同的方法来获取连接信息,本文给大家介绍了Linux系统查看当前网络连接数的方法
    2024-12-12
  • linux如何利用crontab添加定时任务详解

    linux如何利用crontab添加定时任务详解

    这篇文章主要给大家介绍了关于linux如何利用crontab添加定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04

最新评论