我的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安装的可信密钥。我不想说:“我的机器上运行Java的每个应用程序都应该信任该证书”。只有Tomcat(或运行Tomcat的用户)才应该信任它。
所以我尝试将它导入到~/.keystore
的tomcat-user的密钥库中,并使用以下属性设置Tomcat的<Connector>
:
keystoreFile="${user.home}/.keystore"
keystorePass="thePassphraseICreatedTheKeystoreWith"
然而,这根本不起作用(我相信,这只适用于我的Tomcat的服务器证书,而不适用于外部服务器的服务器证书,对吗?)
我尝试使用truststoreFile
/ truststorePass
属性,但它们也没有用。 (属性记录在http://tomcat.apache.org/tomcat-6.0-doc/config/http.html)
有没有办法使用外部服务器的服务器证书设置Tomcat,或者可以向java
添加一些命令行参数,这使得我的密钥库(和密钥库密码)可用于JVM实例?
答案 0 :(得分:7)
JBoss(基于Tomcat)可以使用以下cmd参数运行。 cacerts文件(或者您想为其命名)必须包含端点的证书。
-Djavax.net.ssl.trustStore = C:\应用\的jboss-作为\服务器\默认\ CONF \ cacerts中 -Djavax.net.ssl.trustStorePassword =的changeit
因此,这也适用于Tomcat。
答案 1 :(得分:0)
另一种方法是将其添加到tomcat server.xml文件中tomcat中的SSL连接器。具体而言,您需要设置truststoreFile属性以启用对来自其他服务器的证书的信任。
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="../../../deploy/tomcat/config/ssl/keystore.jks" keystorePass="changeit"
truststoreFile="../../../deploy/tomcat/config/ssl/keystore.jks" truststorePass="changeit"/>