gpt4 book ai didi

java - 在 JVM 信任库中列出证书

转载 作者:搜寻专家 更新时间:2023-10-31 19:29:58 26 4
gpt4 key购买 nike

我已经通过系统属性定义了一个自定义信任库:

System.setProperty("javax.net.ssl.trustStore", ...);
System.setProperty("javax.net.ssl.trustStorePassword", ...);

鉴于 VM 已经负责加载文件,我想列出那些已加载的证书。我不想再次将信任库加载到流中并从那里获取证书,而是我想查看 VM 已经自行加载的证书。此外,我想从我自己的应用程序中查看它们,而不是使用单独的工具。我已经进行了一些谷歌搜索,但到目前为止我一直无法找到它。

最佳答案

使用它们时,JSSE 使用这些设置来构建其默认的 X509TrustManager(覆盖 JRE 默认值)。但是,JSSE API 中没有任何内容可以访问用于构建默认信任管理器的 keystore ,因为在 JSSE 架构中,原则上不需要从 keystore 构建默认信任管理器。

如果您想读取通过 javax.net.ssl.trustStore* 属性传递的信任库的内容,您必须自己打开该文件。

您可以获得的最接近的东西是使用默认 TrustManagerFactory 的默认 X509TrustManager

编辑:

更多细节,您可以查看OpenJDK中的实现。

sun.security.ssl.DefaultSSLContextImpl 中的逻辑(不是公共(public) API 的一部分)是使用从 TrustManagerFactoryImpl(不是公共(public) API 的一部分)获得的 KeyStore 初始化 TrustManagerFactory要么):

KeyStore ks = TrustManagerFactoryImpl.getCacertsKeyStore("defaultctx");
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);

这与 TrustManagerFactory 的行为一致使用 tmf.init(null)。这也依赖于默认的 keystore ,但这在公共(public) API 中有记录。事实上,实现(使用 tmf.init(null))最终会做同样的事情,如 TrustManagerFactoryImpl 所示。 (当 keystore 参数为 null 时,engineInit 也会调用 getCacertsKeyStore)。

在这两种情况下,KeyStore 变量都没有存储在类成员中,它只是一个局部变量,在使用这些初始化方法后无法访问。

结果X509TrustManagerImpl确实包含可信证书列表,但是 (a) trustedCerts 是私有(private)成员,并且 (b) 这些都不是 JSSE 公共(public) API 的一部分。

编辑 2:

如果您想要的东西可能大部分时间都有效,但不能保证有效,this answer应该有帮助。请注意 the default trust store isn't necessarily cacerts .

关于java - 在 JVM 信任库中列出证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8884831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com