我正在尝试使用Tomcat 8.5更改server.xml,并在尝试启动tomcat时出现以下错误:
09-Feb-2017 06:23:25.278警告[main] org.apache.catalina.startup.Catalina.load使用conf / server.xml的Catalina.start:错误在(135,20):多个SSLHostConfig元素是提供主机名[默认]。主机名必须是唯一的。
相关server.xml代码:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" >
<SSLHostConfig>
keystoreFile="/saswork/sasadmin/tomcat/certs/eccerts"
keystorePass="xxxxxxxx"
storepass="xxxxxxxx"
truststoreFile="/saswork/sasadmin/tomcat/certs/eccerts"
sslProtocol="TLS"
</SSLHostConfig>
对于错误的含义以及对解决方案欢迎的建议表示赞赏。
答案 0 :(得分:31)
一个非常令人困惑的错误“多个SSLHostConfig元素”当你显然只有一个。
原来这是由使用弃用指令引起的。
如果你在Connector
指令中放置了这些deprecated attributes中的任何一个,那么tomcat会假设你使用的是旧方式并自动创建一个SSLHostConfig
本身,然后与你的那个冲突创建
在您的特定情况下,您在clientAuth="false"
指令上使用了Connector
certificateVerification="none"
指令已成为SSLHostConfig
答案 1 :(得分:7)
首先,<SSLHostConfig>
的语法不正确。
它应该是:
<SSLHostConfig>
<Certificate ... />
</SSLHostConfig>
另外,我在keystorePass
内置<Connector>
运气好得多。
对我而言没有失败的唯一<Connector>
是:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="keystore.jks" keyAlias="alias"
keystorePass="password"
clientAuth="false" sslProtocol="TLS" />
否则会发生这些MultipleSSLHostConfig
元素错误。
答案 2 :(得分:0)
以下示例绝对适用于Tomcat 8.5中的JKS密钥库:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
port="443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
compression="on" compressionMinSize="1048576"
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/json,application/javascript"
defaultSSLHostConfigName="*.host.com" >
<SSLHostConfig protocols="TLSv1.2,+TLSv1.1,+TLSv1"
ciphers="TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256"
hostName="*.host.com" >
<Certificate
certificateKeyAlias="tomcat"
certificateKeystoreFile="conf/keystore.jks"
certificateKeystorePassword="changeit" type="RSA" />
</SSLHostConfig>
</Connector>
答案 3 :(得分:-1)
这是我的有效配置:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
defaultSSLHostConfigName="your.hostname.com">
<SSLHostConfig hostName="your.hostname.com" protocols="TLSv1.2,+TLSv1.1,+TLSv1">
<Certificate certificateKeystoreFile="conf/keystore"
type="RSA" certificateKeystorePassword="xxx"/>
</SSLHostConfig>
</Connector>
我必须设置连接器的defaultSSLHostConfigName
属性和SSLHostConfig的hostName
属性。