10

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

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

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

  • 使用Keystore类。

  • 如果程序在运行应用程序的应用服务器上运行,则可以通过其面板设置存储路径。

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

和许多其他方式。

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

4

1 回答 1

17

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

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

甚至没有任何东西SSLSocket可以让你回到它的位置SSLSocketFactory,也没有任何东西可以让你回到它的起源SSLContext,也没有任何东西可以让你获得信任经理。

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

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

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

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

于 2012-12-01T14:22:39.950 回答