在 Tomcat 中配置信任库



我有一个Java servlet目前在Tomcat 7(Windows)上运行,它连接到SQL Server数据库。 我现在需要加密此连接,并且我在密钥库中有一个公钥 SSL 证书。 但显然我必须为"信任库"配置系统属性,并将信任库设置为密钥库。

密钥库位置是 C:\SSLKeys\appkeystore.key根据我发现的内容,我必须使用以下方式设置信任库;

Djavax.net.ssl.trustStore=C:SSLKeysappkeystore.key
Djavax.net.ssl.trustStorePassword=appkeystorePassword

但是我该如何设置这些呢? 我已经在命令行中尝试过,但这似乎不起作用。 我不想在 Java 中对这些进行硬编码,因为我需要它们是可配置的。

这些可以在Tomcat的Catalina.bat文件中设置吗? 如果是这样,我应该将命令放在文件中的哪个位置?

我想

我可能已经找到了方法,或者至少一种方法可以做到这一点。 有人请告诉我是否有更好的方法来处理这个问题。 在 Tomcat\bin 文件夹中,其中 catalina.bat 文件我创建了一个 setenv.bat 文件,并在那里声明了两个 Java 选项属性;

set JAVA_OPTS="-Djavax.net.ssl.trustStore=C:pathtokeystore.key" "-Djavax.net.ssl.trustStorePassword=************"

显然,当Tomcat启动时,它会启动catalina.bat文件,catalina.bat文件确定setenv.bat文件是否存在,如果是,则运行此文件以设置Java选项。

如果我错了,再次有人请纠正我,并建议更好的方法。 虽然显然Tomcat被设置为Windows服务,但上面的选项是通过tomcatXw输入的.exe以启动Tomcat控制台并选择Java选项卡。

如果其他人有这个问题,这是我所做的:
1. 导航到 \tomcatDirectory\bin\
2. 根据您的机器编辑 catalina.sh/bat。
3. 将这些属性添加到JAVA_OPTS属性

JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=$CATALINA_HOME/certificates/truststore.ks -Djavax.net.ssl.trustStorePassword=truststorePassword -server"

这实质上将告诉 tomcat 使用指定的信任库,而不是默认的 cacerts 信任库,如果 tomcat 找不到系统属性中指定的任何信任库,则 tomcat 会加载该信任库。

另外,我注意到可以在 tomcat 的主配置文件服务器.xml中定义信任库。您所要做的就是在连接器属性中设置这些属性。

<Connector port="8443" maxThreads="500"
           server="Apache"
           scheme="https" secure="true" SSLEnabled="true" acceptCount="500"
           keystoreFile="/apps/content/certificates/keystore.ks" keystorePass="keystorepass"
           truststoreFile="/apps/content/certificates/truststore.ks" truststorePass="truststorePassword"/>

试试吧,希望对您有所帮助!

推荐的答案仅适用于部署在Windows中的Tomcat,我发现以下内容在Linux服务器中对我有用:

TOMDOGEDIRECTORY/bin/setenv.sh [您需要自己创建此文件]

JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=/opt/meh_tuststove.jks" 
JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStorePassword=muchsecure" 
export JAVA_OPTS
您需要

为此更改server.xml文件。您可以在conf/目录中找到它。

首先取消注释这些行:

<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->

然后像这样更改它

<Connector SSLEnabled           ="true"
           acceptCount          ="100"
           clientAuth           ="false"
           disableUploadTimeout ="true"
           enableLookups        ="false"
           maxThreads           ="25"
           port                 ="8443"
           keystoreFile         ="C:SSLKeysappkeystore.key"
           keystorePass         ="password"
           protocol             ="org.apache.coyote.http11.Http11NioProtocol"
           scheme               ="https"
           secure               ="true"
           sslProtocol          ="TLS"
/>

最新更新