我目前正在使用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下,最好是从同一密钥库中。
据我所知,我需要添加第二个连接器。我的问题是我不确定如何告诉连接器在密钥库中使用哪个证书。
看来该方法与使用keyAlias属性有关。但是,似乎已不赞成使用SSLHostConfig。不幸的是,无论是哪种配置方式,都无法为我的用例找到合适的文档,更不用说示例了。
如何正确配置连接器?如果有多种方法,那么什么才是最佳实践?我是否应该将两个证书都存储在同一密钥库中?
最佳答案
在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。
关于tomcat - Tomcat中使用不同证书的多个HTTPS连接器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50639718/