当前位置: 代码网 > it编程>编程语言>Java > linux系统中java的cacerts的优先级详解

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

2025年09月28日 Java 我要评论
了解 java 信任库(cacerts)的关系和优先级确实很重要,这关系到你的应用能否正确验证 ssl/tls 证书。简单来说,java 默认会使用其自有 jre 目录下的 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/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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com