我对cacerts
和jssecacerts
文件之间的差异感到非常困惑。
我知道默认情况下,java会查找jssecacerts
文件,然后查找cacerts
文件。
但是jssecacerts
文件有什么意义呢?
我的理解是,如果需要使用新的信任库,则应创建cacerts
的副本,并将所有新的可信CA添加到该副本。然后,cacerts
系统属性应引用-Djavax.net.ssl.trustStore
(包含新CA)的副本。这样,在该计算机上运行的其他Java应用程序将不会意外地信任非默认CA.
答案 0 :(得分:31)
从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 :(得分:11)
据我了解,cacerts
文件是默认发货的文件。
如果有jssecacerts
个文件,则仅使用它 - 不是cacerts
文件的补充。
我的建议:保留cacerts
文件,复制到jssecacerts
并添加jssecacerts
文件所需的任何私有CA /签名证书。
答案 2 :(得分:4)
好问题。我认为这源于JSSE曾经是附加组件的历史事实。 JSSE确实允许多个提供者,因此jssecacerts
可能仅适用于JSSE提供者,其他提供者可能使用自己的提供者。
但是谁在JSSE之前使用了cacerts是另一个问题。