为什么 Java 信任库在所有已安装的 JDK 版本中都相同?

Why are Java truststores identical across all installed JDK versions?

我正在对我的 Apache Tomcat 服务器上的 SSLHandshakeException 进行故障排除,当时我注意到服务器上的 JDK 信任库 (<jdk-root>/lib/security/cacerts) 有一些非常奇怪的行为。

在服务器上安装的所有许多 JDK 中(多个主要和次要版本),无论我在哪里查看特定安装下的信任库,它都与所有其他完全相同。

此外,如果我使用此命令导入新证书 keytool -import -trustcacerts -alias <somealias> -file <somecertificate>.cer -keystore <jdk-root>/lib/security/cacerts -storepass <password>,这个新导入的证书也会立即包含在不同 JDK 安装下的所有其他信任库中。 运行 tomcat 应用程序也无需重新启动 JVM 即可使用这个新导入的证书。

自动重新加载和共享信任库与我在本地开发环境中的体验形成鲜明对比,这就是我对此感到困惑的原因。

有人能指出我这里发生的事情的方向吗?

因为“cacerts”在您的服务器上是一个符号 link。用 ls -la <jdk-root>/lib/security/

检查一下