2017-10-18 186 views
0

在的conf/server.xml中我写了下面的文字:如何让我的应用程序访问在Tomcat中的server.xml配置的keyStore.jks

<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"/> 

而接下来我需要使用密钥存储器的内容中的代码(在服务器端的servlet中)。

我尝试这样做:

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

但它返回密钥库的名称。

那么有没有办法获得keyStore的内容?或者,也许我应该做另一种服务器配置?

(我的下一个步骤是从的keyStore提取私钥和公钥,并使用他们的JWT)

回答

0

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

但我会建议你使用另一个密钥库+键,在专用的配置为你的智威汤逊需求,使:

  • 你的代码不紧耦合到Tomcat(=可移植性)
  • 您ops不需要关心你的应用程序的特定需求(和/或不愿意更新他们的所有tomcat服务器上使用的标准SSL密钥库)
  • 你没有使用相同的密钥进行加密(SSL)和授权(JWT)。让攻击者的生活变得更加困难总是很好。

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

相关问题