如何以编程方式在磁盘上查找当前信任库?

use*_*353 6 java ssl truststore

是否有任何函数告诉我在我的程序中使用的当前信任库是什么.在Windows上,默认信任库位于JAVA_HOME\lib\security\cacerts.

但是,可以通过多种方式更改默认值.

  • 使用-Djavax.net.ssl.keyStore命令行

  • 使用Keystore课程.

  • 如果程序在运行应用程序的App Server上运行,则可以通过其面板设置存储路径.

  • 如果程序在Tomcat上运行,则Tomcat设置可能会更改信任库.

和许多其他方式.

是否有一种编程方式可以找出当前处于活动状态的信任库的磁盘路径?

Bru*_*uno 12

一般来说,你不能(这与这个问题非常相似).

在JSSE API中,信任证书实际上并不是由信任存储决定的,而是由一个TrustManager.虽然它通常使用密钥库(信任库)初始化,但这不是必需的.此外,密钥库本身不必是文件.默认信任管理器API中没有任何内容可以让您检查潜在信任存储的使用位置和方式.

甚至没有什么SSLSocket可以让你回到它SSLSocketFactory,没有什么可以让你回到它的原始SSLContext,没有任何东西可以让你获得信任经理.

哪个信任库/信任管理器当前处于活动状态也很大程度上取决于应用程序.一般来说,没有什么能告诉您应用程序正在使用的连接使用默认值SSLContext,可以通过javax.net.ssl.*系统属性进行初始化.应用程序可以自由地初始化它们SSLContext以创建它们的套接字(这是Tomcat在指定某些值时为其连接器所做的事情).

从Java 6开始,默认(当前)SSLContext也可以全局更改(通过SSLContext.setDefault(...).

您可以从JSSE参考指南中找到默认使用的内容.其余的将取决于每个应用程序的文档.-Djavax.net.debug=SSL,trustmanager如果需要,使用可能会有所帮助,但这不是API访问.

(顺便说一下,-Djavax.net.ssl.keyStore将为默认密钥管理器设置密钥库,而不是信任存储.)

  • 仍然当`-Djavax.net.debug = SSL时,trustmanager`快速给你作为日志`trustStore是:C:\ Program Files\Java\jdk1.7.0_01\jre\lib\security\cacerts`,它有帮助(我虽然我在运行java 8) (3认同)