我的应用程序如何访问Tomcat server.xml中配置的keyStore.jks

时间:2017-10-18 14:57:41

标签: java tomcat ssl jks

在conf / server.xml中,我写了以下文字:

<Connector port="8443" SSLEnabled="true" maxHttpHeaderSize="8192" 
    maxThreads="150" minSpareThreads="25" maxSpareThreads="200"
    enableLookups="false" disableUploadTimeout="true"         
    acceptCount="100" scheme="https" secure="true"
     clientAuth="false" sslProtocol="TLS"
     keystoreFile="keyStore" keystorePass="password" keystoreType="JKS"
     keyAlias="tomcat"/>

接下来我需要在代码中使用keyStore的内容(在服务器端的servlet中)。

我试过了:

 System.getProperty("javax.net.ssl.keyStore")

但它返回keyStore的名称。

那么获取keyStore的内容是什么方式?或者我可能应该进行另一种服务器配置?

(我的下一步是从keyStore中提取私钥和公钥,并将它们用于JWT)

1 个答案:

答案 0 :(得分:0)

我想您应该能够通过ServerFactory.getServer().findServices()[0].findConnectors()[0]org.apache.tomee.loader.TomcatHelper.getServer()获取参数值(具体取决于您的版本)  Tomcat - 请参阅this question),然后像往常一样使用它们打开密钥库(KeyStore.getInstance(...).load(...))。

但是我建议您使用另一个密钥库+密钥,在专用配置中满足您的JWT需求,以便:

  • 您的代码与Tomcat(=可移植性)
  • 紧密耦合
  • 您的运营商不需要关心您的应用特定需求(和/或不愿意更新其所有tomcat服务器上使用的标准SSL密钥库)
  • 您没有使用相同的密钥进行加密(SSL)和授权(JWT)。让攻击者的生活更加艰难总是好的。

如果您的应用中没有配置文件,并且不想添加配置文件,那么您可以简单地期望使用密钥库的路径定义系统属性。例如,在命令行上使用-Djwt.keystore=<keystore location>启动Tomcat。