Tomcat ssl报错Connector attribute SSLCertificateFile must be defined when using SSL with APR解决方法

  • Post category:http

问题描述

在使用Tomcat启用HTTPS协议后,若使用APR作为后端,可能会遇到以下报错:

Connector attribute SSLCertificateFile must be defined when using SSL with APR

这个错误提示指出,在使用APR作为后端的情况下,Tomcat的SSL配置需要指定证书文件路径。

解决方案

要解决这个问题,可以通过在Tomcat的配置文件中添加SSL证书路径的方式来解决。下面是一些具体步骤。

步骤1:打开Tomcat配置文件

在Tomcat的安装目录下找到conf目录,在该目录下找到server.xml文件。打开该文件,找到以下位置:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
            type="RSA" />
    </SSLHostConfig>
</Connector>

这里如果使用的是APR,请使用以下配置:

<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
    maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateFile="conf/localhost.crt"
            certificateKeyFile="conf/localhost.key"
            certificateChainFile="conf/intermediate.crt"
            type="RSA" />
    </SSLHostConfig>
</Connector>

步骤2:添加证书文件路径

在第二个Connector标签中,添加以下参数:

SSLCertificateFile="<证书文件路径>"

例如:

<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
    maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateFile="conf/localhost.crt"
            certificateKeyFile="conf/localhost.key"
            certificateChainFile="conf/intermediate.crt"
            type="RSA" />
        <OpenSSLConf sslProtocol="TLSv1.2" />
    </SSLHostConfig>
    <!-- 添加的部分 -->
    <SSLHostConfig>
        <Certificate certificateFile="/usr/local/ssl/certs/example.crt"
                     certificateKeyFile="/usr/local/ssl/private/example.key"
                     certificateChainFile="/usr/local/ssl/certs/ca.crt"
                     SSLCertificateFile="/usr/local/ssl/certs/example.crt"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

步骤3:重启Tomcat

重启Tomcat,再次访问HTTPS服务,即可顺利使用。

示例说明

下面我们以两种具体情况来说明如何应用上述解决方法。

示例1:使用自签名证书

若使用自签名证书,可以按照以下步骤来解决该问题:

  1. 生成自签名证书,使用openssl生成证书并保存到${CATALINA_HOME}/conf 目录下
  2. 修改server.xml中的SSL配置,添加证书文件路径,如下所示:

    text
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
    maxThreads="150" SSLEnabled="true" secure="true"
    SSLCertificateFile="${catalina.base}/conf/self.crt"
    SSLCertificateKeyFile="${catalina.base}/conf/self.key"
    />

    3. 重启Tomcat。

示例2:使用正式证书

若使用正式证书,可以按照以下步骤来解决该问题:

  1. 将正式证书、私钥,以及证书链文件放入具体的目录下。
  2. 修改server.xml中的SSL配置,添加证书文件路径,如下所示:

    text
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
    maxThreads="150" SSLEnabled="true" secure="true"
    SSLCertificateFile="/usr/local/ssl/certs/example.crt"
    SSLCertificateKeyFile="/usr/local/ssl/private/example.key"
    SSLCertificateChainFile="/usr/local/ssl/certs/ca.crt"
    />

    3. 重启Tomcat。

以上就是如何解决Tomcatssl报错ConnectorattributeSSLCertificateFilemustbedefinedwhenusingSSLwithAPR的完整攻略。