Tomcat 8.5 server.xml - 为主机名[_default_]提供了多个SSLHostConfig元素。主机名必须是唯一的

时间:2017-02-09 11:46:34

标签: tomcat

我正在尝试使用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>   

对于错误的含义以及对解决方案欢迎的建议表示赞赏。

4 个答案:

答案 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属性。