jdk8与jdk8以后的版本证书安装路径的区别
【摘要】 jdk8升级后的证书安装可能会有一些问题,梳理一下流程
背景
jdk从JDK 9 开始,Oracle 就对 Java 平台进行了模块化重构(Project Jigsaw),并取消了传统意义上的 JRE 目录结构。这是一次架构上的重大变革,目的是让 Java 更轻量、更灵活、更安全。
原因
- 模块化设计:JDK 9 引入了模块系统,JRE 不再是一个固定的目录,而是可以根据需要定制。
- DK 已包含运行环境:JDK 本身就包含了运行 Java 程序所需的全部内容,不再需要单独的 JRE。
- 减少冗余:以前 JDK 和 JRE 都包含一套运行时,容易造成重复。现在统一为一个 JDK,简化维护。
- 鼓励使用 jlink:开发者可以使用 jlink 工具按需生成自定义的运行时镜像(类似 JRE),只包含所需模块。
如何自己生成 JRE?
可以使用 jlink 命令创建一个自定义的 JRE:
jlink --module-path $JAVA_HOME/jmods --add-modules java.desktop --output jre
- –module-path 指向 JDK 的 jmods 目录
- –add-modules 指定你需要的模块(如 java.base, java.desktop 等)
- –output 指定生成的 JRE 目录
这样就可以得到一个轻量级的、只包含必要模块的 JRE
证书安装
安装路径
jdk8及以前
$JAVA_HOME/jre/lib/security/cacerts
cacerts 是 Java 默认的证书库(keystore),用于存储受信任的根证书。
步骤
- 导出目标网站证书
- 用浏览器访问目标 HTTPS 网站
- 点击地址栏的🔒图标 → 查看证书 → 导出为 .cer 或 .crt 文件(Base64 编码)
- 使用 keytool 导入证书
keytool -import -alias yourCertAlias -file /path/to/yourCert.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
- -alias:证书别名,自定义即可
- -file:你的证书文件路径
- -keystore:目标证书库路径
- -storepass:默认密码是 changeit
- 验证是否导入成功
keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -alias yourCertAlias -storepass changeit
看到证书信息就说明导入成功。
JDK 9 及以后版本可能没有 jre 子目录,证书库路径变为:
$JAVA_HOME/lib/security/cacerts
使用 jlink 创建自定义 JRE 时,默认生成的目录结构如下
your-custom-jre/
├── bin/
├── conf/
│ └── security/
│ └── cacerts
├── lib/
所以证书路径为:
your-custom-jre/conf/security/cacerts
如果jdk与jre下都安装了证书,验证Java程序真正使用的哪个运行环境
public class CheckJavaEnv {
public static void main(String[] args) {
System.out.println("Java Version: " + System.getProperty("java.version"));
System.out.println("Java Home: " + System.getProperty("java.home"));
System.out.println("Java Vendor: " + System.getProperty("java.vendor"));
}
}
运行后会输出当前程序使用的 Java 环境信息
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)