为什么java有cacerts和jssecacerts两个文件?

问题描述:

我对cacertsjssecacerts文件之间的差异感到非常困惑。为什么java有cacerts和jssecacerts两个文件?

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

但是jssecacerts文件有什么意义?

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

+0

你真的找不到3个答案是正确的吗?你能选择一个你认为正确的吗? – JoeG 2016-07-13 12:36:25

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

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

据我所知,cacerts文件是发货的默认文件。

如果有一个jssecacerts文件,它将被专门用于 - 不是除了cacerts文件。

我的推荐:保留cacerts文件,复制到jssecacerts并添加所需的任何私人CA /签署证书jssecacerts文件。

+0

感谢你们,我也发现如果jssecacerts文件存在,那么在cacerts中拥有CA不起作用,并且它需要添加到jssecacerts中。 – 2014-01-20 02:38:48

+0

@EJP你不是“发泄”运送的jssecacerts文件。没有jssecacerts文件出货。通过将cacerts复制到jssecacerts,Java现在将使用jssecacerts。现在,您可以使用'keytool'从jssecacerts添加/远程证书,而无需担心随Java改变默认值(cacerts)。撤销任何更改与从目录中删除jssecacerts一样简单。 – DeezCashews 2014-08-13 13:15:29

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 /签名证书,开发人员可以使用第一种或第二种方式,前者可能只包含特定的证书,但后来包含证书列表。

+4

这个问题一旦发现1,2或3它就使用它,所以jssecacerts需要包含所有的证书(如果使用的话)。 – JoeG 2016-07-13 12:38:10