是否有任何函数告诉我在我的程序中使用的当前信任库是什么 . 在Windows上,默认信任库位于JAVA_HOME \ lib \ security \ cacerts .
但是,可以通过多种方式更改默认值 .
-
在命令行中使用
-Djavax.net.ssl.keyStore
-
使用
Keystore
类 . -
如果程序在运行应用程序的App Server上运行,则可以通过它的面板设置存储路径 .
-
如果程序在Tomcat上运行,则Tomcat设置可能会更改信任库 .
和许多其他方式 .
是否有一种编程方式可以找出当前处于活动状态的信任库的磁盘路径?
1 回答
一般来说,你不能(这与this question非常相似) .
在JSSE API中,信任证书实际上并不是由信任库确定的,而是由
TrustManager
确定的 . 虽然它通常使用密钥库(信任库)初始化,但这不是必需的 . 另外,keystores themselves don't have to be files . 默认信任管理器API中没有任何内容可以让您检查潜在信任存储的使用位置和方式 .SSLSocket
中甚至没有任何内容可以让你回到它的SSLSocketFactory
,并且没有任何东西可以让你回到它的原始SSLContext
,并且没有任何东西可以让你获得信任管理器 .哪个信任库/信任管理器当前处于活动状态也很大程度上取决于应用程序 . 一般来说,没有什么能告诉你应用程序正在使用的连接是使用默认的
SSLContext
,它可以由javax.net.ssl.*
系统属性初始化 . 应用程序可以自由初始化它们自己的SSLContext
来创建它们的套接字(这是Tomcat在指定某些值时为其连接器所做的事情) .从Java 6开始,默认(当前)
SSLContext
也可以全局更改(通过SSLContext.setDefault(...)
.您可以在JSSE Reference Guide中找到默认使用的内容 . 其余的将取决于每个应用程序的文档 . 如果需要,使用
-Djavax.net.debug=SSL,trustmanager
可能会有所帮助,但这不是API访问 .(顺便说一句,
-Djavax.net.ssl.keyStore
将为默认密钥管理器设置密钥库,而不是信任存储 . )