我正在使用Java和Tomcat中的安全性进行操作,然后我开始讨论JVM最后加载了哪个密钥库/信任库.即使我创建了自己的密钥库并且在Tomcat配置中,它也用作密钥库和可信任,现实情况是默认cacerts文件作为信任库加载(作为密钥库,我的文件使用得当).
我试图获取JVM加载的文件的名称,但我还没有找到解决方案.我的想法是获得System.getProperty("javax.net.ssl.keyStore"),但这给了我null.我尝试通过Connector在Tomcat的server.xml中设置它,并作为命令行参数-Djavax.net.ssl.keyStore ="file".我确信命令行参数是正确提供的,因为我在同一个地方设置JMX参数.
br,马丁
您甚至不一定从类型的文件名中就能获得所需的内容,并且keystore
在连接器中进行设置对系统属性绝对没有影响。
此外,无论是从javax.net.ssl.keyStore
属性指定还是显式实例化的密钥库,都只是KeyManager
和设置的一部分SSLContext
。(默认情况下,Apache Tomcat将使用文件和相对简单的加载机制,但是也可以使用Tomcat的自定义机制SSLImplementation
。)如果您真的想查看正在加载的内容,则可以查看JSSE调试标志,更具体地说,是像这样:
-Djavax.net.debug=SSL,keymanager,trustmanager
Run Code Online (Sandbox Code Playgroud)
编辑:我应该补充一点,一般来说没有默认密钥库(在Tomcat的上下文之外),只有默认信任库。Tomcat的默认JSSEImplementation
用法System.getProperty("user.home") + "/.keystore"
。
你用的是 Tomcat 6 吗?
我尝试在 catalina.bat 中将其设置为
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Djavax.net.ssl.keyStore="path-to-file"
Run Code Online (Sandbox Code Playgroud)
它反映在我的代码中用作System.getProperty("javax.net.ssl.keyStore")
另外,供您参考,其他 SSL 属性上有一个Bugzilla被忽略,该 Bugzilla 在 6.0.16 中已修复。那里没有特别提到 keyStore,但我的版本是 6.0.20 并且它可以工作