为了账号安全,请及时绑定邮箱和手机立即绑定

为什么可以在不提供密码的情况下指向使用自定义密码的信任库?

为什么可以在不提供密码的情况下指向使用自定义密码的信任库?

GCT1015 2023-12-30 16:15:59
我有一个非常简单的场景:public class Main {    public static void main(String[] args) {        System.setProperty("javax.net.debug", "ssl");         System.setProperty("javax.net.ssl.trustStore", "H:/data/serverkeystore.jks");        System.setProperty("javax.net.ssl.trustStorePassword", "somestuff");        try {            ServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();            SSLServerSocket serverSocket = (SSLServerSocket) ssf.createServerSocket(1337);    ... code goes on here ...我是否评论该行并不重要System.setProperty("javax.net.ssl.trustStorePassword", "somestuff");出或者如果我使用它。在这个问题的答案中,很好地描述了密码的用途(即使那里缺少源信息),并且如果不给出密码,则无法验证 TrustStore 的完整性。因此,在我的示例代码中,如果取消注释该行,Java 将使用 TrustStore 而不检查其完整性。通过我自己的测试,我可以确定如果我输入错误的密码并使用代码(如上所示),则会出现错误消息(这是期望的结果)。我只是感到惊讶的是,可以省略密码,然后 Java 显然可以与未经检查的 TrustStore 一起使用。任何人都可以根据我的问题解释 TrustStore 的初始化例程吗?正如问题中已经提到的,我使用自己的 TrustStore 密码,该密码与标准密码“changeit”不同。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

它甚至取决于 SPI (JCE) 实现,实际上您不需要任何密码即可列出 JKS 存储。

证书不是保密的,但您不希望任何人篡改系统应信任的证书列表(例如提供恶意/虚假根 CA)。

应该有一种方法来强制信任库的信任(应该验证密码)。如果密码错误的话会失败吗?

是的,它会失败,如果您不提供密码,则无法更新信任库

事实上,这是预期的行为。对于 JKS 密钥库,您可以列出没有任何密码的条目和证书,但无法验证完整性。无论如何,您应该在您的应用程序中提供密码,以确保没有人使用您的信任库。


查看完整回答
反对 回复 2023-12-30
  • 1 回答
  • 0 关注
  • 46 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信