将外部服务器的自签名证书添加到我的Tomcat的受信任证书中

我的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的

 keystoreFile="${user.home}/.keystore" keystorePass="thePassphraseICreatedTheKeystoreWith" 

但是,这根本不起作用(我相信,这仅适用于我的Tomcat的服务器证书,而不适用于外部服务器的服务器证书,对吧?)

我尝试使用truststoreFile / truststorePass属性,但它们也不起作用。 (这些属性记录在http://tomcat.apache.org/tomcat-6.0-doc/config/http.html )

有没有办法用外部服务器的服务器证书设置Tomcat,或者可能向java添加一些命令行参数,这使得我的密钥库(和密钥库密码)可用于JVM实例?

JBoss(基于Tomcat)可以使用以下cmd参数运行。 cacerts文件(或者您想要命名它)必须包含端点的证书。

-Djavax.net.ssl.trustStore = C:\ Applications \ jboss-as \ server \ default \ conf \ cacerts -Djavax.net.ssl.trustStorePassword = changeit

因此,这也适用于Tomcat。

另一种方法是将其添加到tomcat server.xml文件中tomcat中的SSL连接器。 具体而言,您需要设置truststoreFile属性以启用对来自其他服务器的证书的信任。