Tomcat中的多个HTTPS连接器使用不同的证书

时间:2018-06-01 09:00:25

标签: tomcat ssl https

我目前正在使用Tomcat 8.5通过HTTPs托管Web应用程序。连接器配置如下所示:

<Connector 
    port="8443"
    protocol="HTTP/1.1"  
    connectionTimeout="10000" 
    maxHttpHeaderSize="65536"
    SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
    keystoreFile="myKeystore"
    keystorePass="changeit"
/>

我现在要做的是将应用程序托管在另一个URL下,并使用另一个cerficate,最好是来自同一个密钥库。

据我所知Tomcat documentation我需要添加第二个连接器。我的问题是我不知道如何告诉连接器在密钥库中使用哪个证书。

似乎要走的路与使用keyAlias属性有关。但是,这似乎已被弃用,而有利于SSLHostConfig。不幸的是,我没有找到适合我的用例的文档,无论是哪种配置方式,更不用说示例了。

如何正确配置连接器?如果有多种方式,那么最佳做法是什么?我是否应该将两个证书存储在同一个密钥库中?

1 个答案:

答案 0 :(得分:2)

在找到详细说明Tomcat文档中所有连接器和SSLHostConfig attributes的页面后,我设法创建了一个工作设置。

这两个连接器现在看起来像这样:

<Connector 
    address="192.168.0.100"
    port="8443"
    protocol="HTTP/1.1"  
    maxHttpHeaderSize="65536" connectionTimeout="10000" 
    SSLEnabled="true" scheme="https" secure="true">
    <SSLHostConfig
            sslProtocol="TLS"
            certificateVerification="false">
        <Certificate 
            certificateKeystoreFile="myKeystore"
            certificateKeystorePassword="changeit"
            certificateKeyAlias="server1cert"
            certificateKeyPassword="server1pw"
        />
    </SSLHostConfig>
</Connector>

<Connector 
    address="192.168.0.101"
    port="8443"
    protocol="HTTP/1.1"
    maxHttpHeaderSize="65536" maxThreads="150" 
    SSLEnabled="true" scheme="https" secure="true">
    <SSLHostConfig
            sslProtocol="TLS"
            certificateVerification="false">
        <Certificate 
            certificateKeystoreFile="myKeystore"
            certificateKeystorePassword="changeit"
            certificateKeyAlias="server2cert"
            certificateKeyPassword="server2pw"
        />
    </SSLHostConfig>
</Connector>

需要注意的是替换连接器中所有已弃用的SSL属性。
否则,Tomcat将在内部根据已弃用的属性创建默认的SSLHostConfig,从而在启动期间导致错误。有关详细信息,请参阅this answer