我的文件系统上的 /opt/myapp/keystore/myapp.jks
下有一个自定义 JKS 文件( keystore ),我正在将 myapp.war
部署到 Tomcat7需要使用它。
如果这是一个可执行 JAR(而不是 WAR),我可能会这样做:
java -jar myapp.jar -Djavax.net.ssl.keyStore=/opt/myapp/keystore/myapp.jks
-Djavax.net.ssl/keyStorePassword=mypasswd
在 Tomcat7 中如何/在哪里完成相同的操作?
最佳答案
有多种选择。
如果您很高兴 JVM 可以全局访问这些设置,包括在您的 Tomcat 容器中运行的所有 WAR(但可能不包括您的服务器连接器本身,因为它可以单独配置),将这些选项添加到
catalina
启动脚本中的JAVA_OPTS
(.sh
或.bat
取决于平台) .这并不理想,因为实际上在该 JVM 中运行的任何代码都可以访问该 keystore ,因此您需要确保它是可接受的。如果您可以更改代码,则可以为使用它的任何对象初始化单独的
SSLContext
(您可以获得一个SSLEngine
或一个SSLSocketFactory
从它,你可以用它构建SSLSocket
或初始化HttpsUrlConnection
)。按照这些思路应该可以工作:// Load the key store: change store type if needed KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream fis = new FileInputStream("/path/to/keystore"); try { ks.load(fis, keystorePassword); } finally { if (fis != null) { fis.close(); } } SSLContext sslContext = SSLContext.getInstance("TLS"); // the second "null" argument will let you use the default trust manager settings. sslContext.init(kmf.getKeyManagers(), null, null); SSLSocketFactory sslSocketFactory = sslContext.getSSLSocketFactory();
您可以从 webapp 中的资源而不是
FileInputStream
加载 keystore ,或者可能通过 JNDI,具体取决于您希望如何配置整体设置。
关于java - 如何为 Tomcat7 WAR 指定 keystore 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064399/