我的 Tomcat 需要使用 SSL (TLS) 连接到另一个 Web 服务器(在 https://foreign.example.com )。
foreign.example.com 有一个我信任的自签名证书。当然,我的 Tomcat 默认情况下没有 - 所以我必须告诉它。一种方法是:
$JRE/bin/keytool -import -alias my -file ssl-cert-myselfsigned.cer -keystore
$JRE/lib/security/cacerts
这有效:我的 Tomcat 允许 SSL 连接。
但是,我不喜欢这样做:它将证书导入到我安装的 Java 的受信任 key 中。我不想说:“在我的机器上运行 Java 的每个应用程序都应该信任该证书”。只有 Tomcat(或运行 Tomcat 的用户)应该信任它。
所以我尝试将它导入到位于 ~/.keystore
的 tomcat 用户的 keystore 中,并设置 Tomcat 的 <Connector>
具有这些属性:
keystoreFile="${user.home}/.keystore"
keystorePass="thePassphraseICreatedTheKeystoreWith"
然而,这根本行不通(我相信,这只是针对我的Tomcat的服务器证书,而不是外国服务器的服务器证书,对吧?)
我对 truststoreFile
进行了同样的尝试/truststorePass
属性,但它们也不起作用。 (属性记录在 http://tomcat.apache.org/tomcat-6.0-doc/config/http.html )
有没有办法使用外部服务器的服务器证书设置 Tomcat,或者可以向 java
添加一些命令行参数?这使得我的 keystore (和 keystore 密码)可用于 JVM 实例?
最佳答案
JBoss(基于 Tomcat)可以使用以下 cmd 参数运行。 cacerts 文件(或者您喜欢的名称)必须包含端点的证书。
-Djavax.net.ssl.trustStore=C:\Applications\jboss-as\server\default\conf\cacerts -Djavax.net.ssl.trustStorePassword=changeit
因此这也适用于 Tomcat。
关于java - 将外部服务器的自签名证书添加到我的 Tomcat 的受信任证书中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497183/