我有一个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"
/>