在JRE之外保留cacerts文件有什么优点?

3

我在地址为(/usr/java/jdk1.6.0_29/jre/lib/security/cacerts)的位置拥有一个cacerts文件,因此我的java应用程序会在此位置搜索密钥库文件。

然而,考虑到我的Java版本非常旧,并且只有当JRE升级时cacerts文件才会更新CA根证书,这是相当罕见的(取决于开发优先级),我所理解的是,当某些外部第三方引入未存在于我的cacerts文件中的新第三方证书时,我的Java应用程序将受到影响。

因此,在查看了几个选项后,我发现需要使用属性-Djavax.net.ssl.trustStore并将其值设置为位于JRE之外的cacerts文件位置。因此,应用程序将搜索位于JRE之外的cacerts文件,然后引用它到我的默认cacerts文件。

那么我的问题是为什么这样做?将其放在JRE之外的优点是什么(使其独立于JRE)?

由于它独立于JRE,它会不会寻找新的第三方根证书,因此我的JAVA应用程序就不会受到影响?或者它与属性'javax.net.ssl.trustStore'有关。

我已经参考了这里,但是有没有人能够让我理解这一点,因为我没有清晰的图片。


一个密钥库是“固定的”;一旦创建,除非您手动修改它(使用适当的工具),否则不会被修改。外部密钥库允许您自定义您希望视为有效的CA列表;它将对您创建的所有SSLSocket产生影响,因为未被您的密钥库识别的CA将阻止连接建立。但是我感觉这里还有更多需要解释的地方... - fge
我想知道的是,如果我正在使用一些第三方CA证书,并且它们存在于我的密钥库中,那么一切都很好。但是,如果引入了新的证书并且它们不存在于我的密钥库中,使用属性javax.net.ssl.trustStore是否可以防止影响我的应用程序,即使我的密钥库没有新的证书...? - Smit Davda
是的,只要密钥库包含所有链元素直到根节点,它们就是这样。 - fge
那么您的意思是证书链中的所有证书吗? - Smit Davda
是的,这就是我的意思。在证书中,您既有CN又有颁发者。"根证书"是指CN和颁发者相同的证书。 - fge
好的,但是当第三方颁发新证书时,它也会包含在证书链中,因此我们可能需要通过建立 SSL 连接定期检查新证书。如果我有错误,请纠正。 - Smit Davda
1个回答

2
优点是它使得用户在设置此应用程序时完全控制信任库。特别是,如果:
  • 您需要使用其他未包含在默认捆绑包中的CA证书(例如企业CA),但不想更改默认的cacerts文件:您可能没有对该文件的管理访问权限,或者您可能不希望更改也使用该JRE的其他Java应用程序。
  • 您希望比默认列表更严格,并删除一些您不需要和信任的CA。
缺点是在发生事故后需要审查CA列表。
或者,如果您的环境支持,您还可以考虑使用平台的CA证书(尽管WINDOWS-ROOT有一些错误)。 某些Linux发行版也有单独的CA捆绑包

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接