【问题标题】:Get instance of keystore that JVM loads by default获取JVM默认加载的keystore实例
【发布时间】:2011-03-09 13:34:18
【问题描述】:

我正在研究 Java 和 Tomcat 的安全性,我想知道最后 JVM 加载了哪个密钥库/信任库。尽管我在 Tomcat 配置中创建了自己的密钥库,但它同时用作密钥库和信任库,但实际情况是默认的 cacerts 文件被加载为信任库(作为密钥库,我的文件被正确使用)。

我试图获取 JVM 加载的文件的名称,但我没有找到解决方案。我的想法是获取 System.getProperty("javax.net.ssl.keyStore") 但这给了我空值。我尝试通过连接器在 Tomcat 的 server.xml 和命令行参数 -Djavax.net.ssl.keyStore="file" 中设置它。我确信命令行参数提供正确,因为我在同一个地方设置 JMX 参数。

br,马丁

【问题讨论】:

  • 没有任何默认的 KeyStore。有一个默认的信任库,但它的名称不可用。

标签: java ssl


【解决方案1】:

即使是类型的文件名,你也不一定能得到你想要的,在连接器中设置keystore对系统属性绝对没有影响。

此外,密钥库,无论是从javax.net.ssl.keyStore 属性指定还是显式实例化,都只是KeyManagerSSLContext 设置的一部分。 (默认情况下,Apache Tomcat 将使用文件和一个相对简单的加载机制,但也可以使用 Tomcat 的SSLImplementation 自定义它。) 如果您真的想查看正在加载的内容,我会查看JSSE debugging flags,更具体地说,是这样的:

-Djavax.net.debug=SSL,keymanager,trustmanager

编辑: 我应该补充一点,一般来说没有默认的密钥库(在 Tomcat 的上下文之外),只有一个默认的信任库。 Tomcat的JSSEImplementation默认使用System.getProperty("user.home") + "/.keystore"

【讨论】:

  • 在 Tomcat 中可能会造成混淆的一点是,密钥库文件是使用 keystore 属性配置的,而信任库文件是使用 truststoreFile 属性配置的。
  • 我有下面列出的配置,但受信任的证书是从 JRE/lib/security 中的 cacerts 加载的。 keystoreFile="conf/keystore.jks" truststoreFile="conf/keystore.jks"
  • 尝试使用keystore=而不是keystoreFile=(但保留truststoreFile)。
【解决方案2】:

你在 Tomcat 6 上吗?

我尝试在 catalina.bat 中将其设置为

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Djavax.net.ssl.keyStore="path-to-file"

它反映在我用作System.getProperty("javax.net.ssl.keyStore")的代码中

另外,为了您的信息,有一个 Bugzilla on 其他 SSL 属性被忽略,该属性已在 6.0.16 中修复。那里没有特别提到 keyStore,但我的版本是 6.0.20 并且可以工作

【讨论】:

  • 我试过的版本是6.0.26。我设置参数的方式是在setenv.(sh|bat)中设置JAVA_OPTS。
猜你喜欢
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 2022-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多