【问题标题】:Why does java have both the cacerts and jssecacerts files?为什么 java 同时具有 cacerts 和 jssecacerts 文件?
【发布时间】:2011-08-08 05:45:07
【问题描述】:

我对@9​​87654321@ 和jssecacerts 文件之间的区别感到非常困惑。

我知道默认情况下 java 会查找 jssecacerts 文件,然后是 cacerts 文件。

但是jssecacerts 文件的意义何在?

我的理解是,如果需要使用新的信任库,则应制作 cacerts 的副本,并将所有新的受信任 CA 添加到该副本中。然后-Djavax.net.ssl.trustStore 系统属性应引用cacerts 的副本(带有新的CA)。这样,在该机器上运行的其他 Java 应用程序就不会意外信任非默认 CA。

【问题讨论】:

  • 您真的发现 3 个答案中没有一个是正确的吗?请您选择您认为正确的那一项好吗?

标签: java ssl jsse truststore


【解决方案1】:

来自Java™ Secure Socket Extension (JSSE) Reference GuideTrustManagerFactory 使用以下步骤尝试查找信任材料:

  1. 系统属性javax.net.ssl.trustStore
  2. java-home/lib/security/jssecacerts
  3. java-home/lib/security/cacerts(默认发货)

我认为这是基于约定优于配置的概念。无需额外的编码工作,将使用cacert。对于额外的私有 CA/签名证书,开发人员可以使用第一种或第二种方式,前者可能只包含一个特定的证书,但后来包含一个证书列表。

【讨论】:

  • 关键是一旦找到 1、2 或 3,它就会专门使用它,因此 jssecacerts 需要包含所有证书(如果使用)。
【解决方案2】:

据我了解,cacerts 文件是出厂默认文件。

如果有 jssecacerts 文件,则它是专门使用的 - 不是在 cacerts 文件之外使用。

我的建议:保留 cacerts 文件,复制到 jssecacerts 并将所需的任何私有 CA/签名证书添加到 jssecacerts 文件中。

【讨论】:

  • 谢谢你,我也发现如果存在 jssecacerts 文件,cacerts 中的 CA 不起作用,需要将其添加到 jssecacerts 中。
  • @EJP 您没有“破坏”随附的 jssecacerts 文件。没有发布 jssecacerts 文件。通过将 cacerts 复制到 jssecacerts,Java 现在将使用 jssecacerts。现在,您可以使用 keytool 从 jssecacerts 添加/远程证书,而无需担心更改 Java 附带的默认值 (cacerts)。撤消任何更改就像从目录中删除 jssecacerts 一样简单。
【解决方案3】:

好问题。我认为这源于 JSSE 曾经是一个附加组件的历史事实。 JSSE 确实允许多个提供者,所以jssecacerts 可能仅适用于 JSSE 提供者,其他提供者可能会使用自己的。

但谁在 JSSE 之前使用 cacerts 是另一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2019-05-04
    • 2020-11-03
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多