为什么java有cacerts和jssecacerts两个文件?
我对cacerts
和jssecacerts
文件之间的差异感到非常困惑。为什么java有cacerts和jssecacerts两个文件?
我知道默认情况下java会查找jssecacerts
文件,然后查找cacerts
文件。
但是jssecacerts
文件有什么意义?
我的理解是,如果需要使用新的信任库,那么应该创建cacerts
的副本,并将所有新的可信CA添加到该副本中。 cacerts
(带有新的CA)的副本应该被-Djavax.net.ssl.trustStore
系统属性引用。这样,在该机器上运行的其他java应用程序不会意外地信任非默认的CA.
好问题。我认为它源于历史事实,JSSE曾经是一个附加组件。 JSSE确实允许多个提供者,所以也许jssecacerts
仅用于JSSE提供者,并且其他提供者可以使用他们自己的。
但是谁在JSSE之前使用过cacerts是另一个问题。
据我所知,cacerts
文件是发货的默认文件。
如果有一个jssecacerts
文件,它将被专门用于 - 不是除了cacerts
文件。
我的推荐:保留cacerts
文件,复制到jssecacerts
并添加所需的任何私人CA /签署证书jssecacerts
文件。
感谢你们,我也发现如果jssecacerts文件存在,那么在cacerts中拥有CA不起作用,并且它需要添加到jssecacerts中。 – 2014-01-20 02:38:48
@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 Guide,TrustManagerFactory
使用下列步骤来尝试找到信任材料:
- 系统属性
javax.net.ssl.trustStore
java-home/lib/security/jssecacerts
-
java-home/lib/security/cacerts
(默认发货)
我觉得这基于约定而不是配置概念。没有额外的编码工作,cacert
将被使用。对于额外的专用CA /签名证书,开发人员可以使用第一种或第二种方式,前者可能只包含特定的证书,但后来包含证书列表。
这个问题一旦发现1,2或3它就使用它,所以jssecacerts需要包含所有的证书(如果使用的话)。 – JoeG 2016-07-13 12:38:10
你真的找不到3个答案是正确的吗?你能选择一个你认为正确的吗? – JoeG 2016-07-13 12:36:25