java 在Tomcat中配置Truststore

wtlkbnrh  于 2023-10-14  发布在  Java
关注(0)|答案(5)|浏览(121)

我有一个Java servlet当前运行在Tomcat 7(Windows)上,它连接到SQL Server数据库。我现在需要加密这个连接,我在密钥库中有一个公钥SSL证书。但显然我必须为 “Truststore” 配置一个系统属性,并将信任库设置为密钥库。
keystore的位置是C:\SSLKeys\appkeystore.key,根据我的发现,我必须使用以下内容设置Truststore;

Djavax.net.ssl.trustStore=C:\SSLKeys\appkeystore.key
Djavax.net.ssl.trustStorePassword=appkeystorePassword

但是我该怎么设置这些呢?我在命令行中尝试过,但似乎不起作用。我不想在Java中硬编码这些,因为我需要它们是可配置的。
这些可以在Tomcat的Catalina.bat文件中设置吗?如果是这样,我把命令放在文件的什么地方?

1mrurvl1

1mrurvl11#

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

set JAVA_OPTS="-Djavax.net.ssl.trustStore=C:\path\to\keystore.key" "-Djavax.net.ssl.trustStorePassword=************"

显然,当Tomcat启动时,它会初始化catalina.bat文件,catalina.bat文件会确定setenv.bat文件是否存在,如果存在,则运行该文件以设置Java选项。
再次有人请纠正我,如果我错了,并建议任何更好的方式这样做。虽然很明显,Tomcat是作为Windows服务设置的,但上面的选项是通过tomcatXw.exe输入的,以启动Tomcat控制台,并选择Java选项卡。

jyztefdp

jyztefdp2#

如果其他人也有这个问题,这是我做的:
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使用指定的信任库,而不是默认的cacc信任库,如果tomcat没有找到系统属性中指定的任何信任库,它将加载默认的信任库。
另外,我注意到可以在tomcat的主配置文件server.xml中定义信任库。您所要做的就是在 connector 属性中设置这些属性。

<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"/>

试试吧,希望有帮助!

ffvjumwh

ffvjumwh3#

推荐的答案只适用于部署在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
b5buobof

b5buobof4#

您需要为此更改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:\SSLKeys\appkeystore.key"
           keystorePass         ="password"
           protocol             ="org.apache.coyote.http11.Http11NioProtocol"
           scheme               ="https"
           secure               ="true"
           sslProtocol          ="TLS"
/>
xuo3flqw

xuo3flqw5#

对于tomcat9,可以在server.xml中添加信任库,如下所示

<Connector port="<portOnWhichHttpsToBeEnabled>" SSLEnabled="true" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS"
               sslEnabledProtocols="TLSv1.2"
               keystoreFile="KEYSTORE_PATH"
               keystorePass="KEYSTORE_PWD"
               truststoreFile="TRUSTSTORE_PATH"
               truststorePass="TRUSTSTORE_PWD"
               URIEncoding="UTF-8"/>

注意:clientAuth必须设置为true
对于tomcat10及以上版本,可以按如下方式添加
第一步:在server.xml中添加密钥库,如下所示

<Connector port="<portOnWhichHttpsToBeEnabled>" SSLEnabled="true" protocol="org.apache.coyote.http11.Http11NioProtocol"
               sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"
               maxThreads="150" scheme="https" secure="true"
              >
      <SSLHostConfig>
        <Certificate
            certificateKeyAlias="KEYSTORE_ALIAS"
            certificateKeystoreFile=""KEYSTORE_PATH""
            certificateKeystorePassword="KEYSTORE_PWD"
            type="RSA"
        />
      </SSLHostConfig>
    </Connector>

步骤2:然后在setenv.sh中添加信任存储,如下所示

export JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=TRUSTORE_PATH -Djavax.net.ssl.trustStorePassword=TRUSTSTORE_PWD"

在Tomcat日志中,可以发现信任存储区的加载方式如下

org.apache.tomcat.util.net.AbstractEndpoint.logCertificate Connector [https-openssl-nio-<portOnWhichHttpsToBeEnabled>], TLS virtual host [_default_], certificate type [RSA] configured from keystore [KEYSTORE_PATH] using alias [KEYSTORE_ALIAS] with trust store [TRUSTORE_PATH]

相关问题