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

时间:2011-04-18 21:59:18

标签: java ssl jsse truststore

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

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

但是jssecacerts文件有什么意义呢?

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

3 个答案:

答案 0 :(得分:31)

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

  1. 系统属性javax.net.ssl.trustStore
  2. java-home/lib/security/jssecacerts
  3. java-home/lib/security/cacerts(默认发货)
  4. 我认为这是基于约定优于配置概念。如果没有额外的编码工作,将使用cacert。对于额外的私有CA /签名证书,开发人员可以使用第一种或第二种方式,前者可能只包含特定证书,但后来包含证书列表。

答案 1 :(得分:11)

据我了解,cacerts文件是默认发货的文件。

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

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

答案 2 :(得分:4)

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

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