使用它们时,JSSE 使用这些设置来构建其默认设置X509TrustManager
(覆盖 JRE 默认值)。但是,JSSE API 中没有任何内容可以访问用于构建默认信任管理器的密钥库,因为在 JSSE 架构中,原则上不需要从密钥库构建默认信任管理器。
如果你想读取通过信任存储传递的内容javax.net.ssl.trustStore*
属性,您必须自己打开该文件。
您能找到的最接近的东西将是默认值X509TrustManager
使用默认值TrustManagerFactory
.
EDIT:
更多细节可以查看OpenJDK中的实现。
逻辑在sun.security.ssl.DefaultSSLContextImpl(不是公共 API 的一部分)是初始化TrustManagerFactory
with a KeyStore
获得自TrustManagerFactoryImpl
(这也不属于公共 API 的一部分):
KeyStore ks = TrustManagerFactoryImpl.getCacertsKeyStore("defaultctx");
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
这与行为一致TrustManagerFactory with tmf.init(null)
。这也依赖于默认密钥库,但这已记录在公共 API 中。
事实上,实施(与tmf.init(null)
)最终会做同样的事情,如图所示TrustManagerFactoryImpl (engineInit
还打电话getCacertsKeyStore
当密钥库参数为空时)。
在这两种情况下,KeyStore
变量不存储在类成员中,它只是一个局部变量,在使用这些初始化方法后无法访问。
所结果的X509TrustManagerImpl确实包含受信任证书的列表,但是 (a)trustedCerts
是私有成员,并且 (b) 这些都不是 JSSE 公共 API 的一部分。
EDIT 2:
如果你想要的东西在大多数情况下都有效,但不能保证有效,这个答案应该有帮助。意识到默认信任存储不一定是cacerts.