Java 如何以编程方式查找磁盘上的当前信任库?
是否有任何函数可以告诉我程序中使用的当前信任库是什么。在windows上,默认的信任存储位于JAVA\u HOME\lib\security\cacerts 但是,可以通过多种方式更改默认设置Java 如何以编程方式查找磁盘上的当前信任库?,java,ssl,truststore,Java,Ssl,Truststore,是否有任何函数可以告诉我程序中使用的当前信任库是什么。在windows上,默认的信任存储位于JAVA\u HOME\lib\security\cacerts 但是,可以通过多种方式更改默认设置 在命令行中使用-Djavax.net.ssl.keyStore 使用密钥库类 如果程序在应用程序运行的应用程序服务器上运行,则可以通过其面板设置存储路径 如果程序在Tomcat上运行,则Tomcat设置可能会更改信任库 还有很多其他的方法 有没有一种编程方法可以让我找到当前处于活动状态的信任库的磁盘路
- 在命令行中使用
-Djavax.net.ssl.keyStore
- 使用
类密钥库
- 如果程序在应用程序运行的应用程序服务器上运行,则可以通过其面板设置存储路径
- 如果程序在Tomcat上运行,则Tomcat设置可能会更改信任库
有没有一种编程方法可以让我找到当前处于活动状态的信任库的磁盘路径?一般来说,你不能(这与) 在JSSEAPI中,信任证书实际上不是由信任存储决定的,而是由
TrustManager
决定的。虽然它通常使用密钥库(信任库)进行初始化,但这并不是必需的。此外,。默认的trust manager API中没有任何内容允许您检查潜在信任存储的使用位置和方式
SSLSocket
中甚至没有任何内容可以让您返回其SSLSocketFactory
,也没有任何内容可以让您返回其原始SSLContext
,也没有任何内容可以让您获得信任管理器
哪个信任库/信任管理器当前处于活动状态也在很大程度上取决于应用程序。一般来说,没有任何东西告诉您应用程序正在进行的连接使用默认的SSLContext
,可以通过javax.net.ssl.*
系统属性初始化。应用程序可以自由初始化自己的SSLContext
s来创建它们的套接字(这是Tomcat在指定某些值时为其连接器所做的)
自Java 6以来,默认值(当前)SSLContext
也可以全局更改(通过SSLContext.setDefault(…)
)
您可以从中找到默认使用的内容。其余内容将取决于每个应用程序的文档。如果需要,使用-Djavax.net.debug=SSL,trustmanager
可能会有所帮助,但这不是API访问
(顺便说一句,
-Djavax.net.ssl.keyStore
将为默认密钥管理器而不是信任存储设置密钥库。)您需要解决的问题到底是什么?@Thorbjørnravandersen-有时问题背后没有不同的问题:-)然后获取JDK的源代码,看看代码的作用。如果幸运的话,会有一个日志语句告诉您它的功能,您可以在Java控制台中启用它。但是,当-Djavax.net.debug=SSL时,trustmanager
会以log的形式快速提供给您,trustStore是:C:\Program Files\Java\jdk1.7.0\u 01\jre\lib\security\cacerts
,它很有帮助(虽然我运行的是Java 8)