55

我对cacertsjssecacerts文件之间的差异感到非常困惑。

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

但是jssecacerts文件的意义何在?

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

4

3 回答 3

42

Java™ Secure Socket Extension (JSSE) Reference Guide中,TrustManagerFactory使用以下步骤尝试查找信任材料:

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

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

于 2013-06-05T03:46:43.133 回答
21

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

如果有一个jssecacerts文件,它是专门使用的 - 不是除了cacerts文件之外。

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

于 2011-04-20T23:05:55.387 回答
4

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

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

于 2011-04-19T01:05:33.963 回答