我的应用程序如何访问 Tomcat server.xml 中配置的 keyStore.jks
How can my application access the keyStore.jks configured in Tomcat server.xml
在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"/>
接下来我需要在代码中(在服务器端的servlet中)使用keyStore的内容。
我试过这个:
System.getProperty("javax.net.ssl.keyStore")
但它 returns keyStore 的名称。
那么有什么办法可以获取到keyStore的内容吗?或者我应该对服务器进行另一个配置?
(我的下一步是从 keyStore 中提取私钥和 public 密钥并将它们用于 JWT)
我想你应该可以通过 ServerFactory.getServer().findServices()[0].findConnectors()[0]
或 org.apache.tomee.loader.TomcatHelper.getServer()
获取参数值(取决于你的版本
Tomcat - 参见 this question),然后照常使用它们打开密钥库 (KeyStore.getInstance(...).load(...)
)。
但我建议您使用另一个密钥库 + 密钥,在专门的配置中满足您的 JWT 需求,以便:
- 您的代码与 Tomcat(= 可移植性)
没有紧密耦合
- 您的操作员不需要关心您的应用程序的特定需求(and/or 不会愿意更新他们所有 tomcat 服务器上使用的标准 SSL 密钥库)
- 您没有使用相同的密钥进行加密 (SSL) 和授权 (JWT)。让攻击者的日子难过一点总是好的。
如果您的应用程序中没有配置文件,并且不想添加一个,那么您可以简单地期望一个系统 属性 被定义为带有密钥库的路径。例如,在命令行中使用 -Djwt.keystore=<keystore location>
启动 Tomcat。
在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"/>
接下来我需要在代码中(在服务器端的servlet中)使用keyStore的内容。
我试过这个:
System.getProperty("javax.net.ssl.keyStore")
但它 returns keyStore 的名称。
那么有什么办法可以获取到keyStore的内容吗?或者我应该对服务器进行另一个配置?
(我的下一步是从 keyStore 中提取私钥和 public 密钥并将它们用于 JWT)
我想你应该可以通过 ServerFactory.getServer().findServices()[0].findConnectors()[0]
或 org.apache.tomee.loader.TomcatHelper.getServer()
获取参数值(取决于你的版本
Tomcat - 参见 this question),然后照常使用它们打开密钥库 (KeyStore.getInstance(...).load(...)
)。
但我建议您使用另一个密钥库 + 密钥,在专门的配置中满足您的 JWT 需求,以便:
- 您的代码与 Tomcat(= 可移植性) 没有紧密耦合
- 您的操作员不需要关心您的应用程序的特定需求(and/or 不会愿意更新他们所有 tomcat 服务器上使用的标准 SSL 密钥库)
- 您没有使用相同的密钥进行加密 (SSL) 和授权 (JWT)。让攻击者的日子难过一点总是好的。
如果您的应用程序中没有配置文件,并且不想添加一个,那么您可以简单地期望一个系统 属性 被定义为带有密钥库的路径。例如,在命令行中使用 -Djwt.keystore=<keystore location>
启动 Tomcat。