为什么java同时拥有cacerts和jssecacerts文件?

hoo*_*knc 48 java ssl jsse truststore

我对文件cacertsjssecacerts文件之间的区别感到非常困惑.

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

jssecacerts文件的重点是什么?

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

Lee*_*iam 35

Java™安全套接字扩展(JSSE)参考指南,TrustManagerFactory使用以下步骤尝试查找信任材料:

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

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

  • 一旦找到1,2或3,它就是专门使用它,所以jssecacerts需要包含所有证书(如果使用的话). (7认同)

小智 13

据我了解,该cacerts文件是默认出货的文件.

如果有jssecacerts文件,则仅使用它 - 不是cacerts文件的补充.

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

  • @EJP 您没有“破坏”随附的 jssecacerts 文件。没有附带 jssecacerts 文件。通过将 cacerts 复制到 jssecacerts,Java 现在将改用 jssecacerts。现在,您可以使用 `keytool` 从 jssecacerts 添加/远程证书,而无需担心更改 Java 附带的默认值 (cacerts)。撤消任何更改就像从目录中删除 jssecacerts 一样简单。 (2认同)

use*_*421 4

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

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