
# 在Tomcat服务器上安装SSL证书
本文以Linux操作系统中的Tomcat7服务器为例介绍SSL证书的安装步骤，您在安装国际标准证书时可以进行参考。证书安装好后，您的web服务器才能支持SSL通信，实现通信安全。
![](https://support.huaweicloud.com/usermanual-ccm/public_sys-resources/note_3.0-zh-cn.png)
由于服务器系统版本或服务器环境配置不同，在安装SSL证书过程中使用的命令或修改的配置文件信息可能会略有不同，云证书与管理服务提供的安装证书示例，仅供参考，请以您的实际情况为准。
如参考文档安装证书后，HTTPS仍然不生效或遇到其他问题，请单击[一对一咨询](https://marketplace.huaweicloud.com/contents/917d16b0-33c4-49d3-bfe9-dd9219ea084e#productid=00301-120142-0--0)购买SSL证书配置优化服务，联系专业工程师为您排查具体问题。
#### 前提条件
- 证书已签发且"证书状态"为"已签发"。
- 已下载SSL证书，具体操作请参见[下载证书](https://support.huaweicloud.com/usermanual-ccm/ccm_01_0027.html)。
- 已安装OpenSSL工具。 您可以从"https://www.openssl.org/source/"下载最新的OpenSSL工具安装包（要求OpenSSL版本必须是1.0.1g或以上版本）。
  
- 已安装Keytool工具。 Keytool工具一般包含在Java Development Kit（JDK）工具包中。
  
- 待安装证书为国际标准证书。
- 确保证书能够匹配所有需保护的域名，如需增加或修改域名，请参见[如何增加、解绑、替换或修改SSL证书域名？](https://support.huaweicloud.com/usermanual-ccm/ccm_01_0115.html)
- 若域名解析指向的服务器位于中国内地则需进行ICP[备案](https://support.huaweicloud.com/qs-domain/domain_qs_280000.html)，否则将导致网站无法访问。
 
#### 约束条件
- 证书安装前，务必在安装SSL证书的服务器上开启"443"端口，同时在安全组增加"443"端口，避免安装后仍然无法启用HTTPS。
- 如果一个域名有多个服务器，则每一个服务器上都要部署。
- 待安装证书的服务器上需要运行的域名，必须与证书的域名一一对应，即购买的是哪个域名的证书，则用于哪个域名。否则安装部署后，浏览器将提示不安全。
 
#### 操作步骤
在Tomcat7服务器上安装SSL证书的流程如下所示：
[①获取文件] → [②创建目录] → [③修改配置文件] → [④重启Tomcat] → [⑤效果验证]
 #### 步骤一：获取文件
安装证书前，需要获取证书文件和密码文件，请根据申请证书时选择的"证书请求文件"生成方式来选择操作步骤：
- 如果申请证书时，"证书请求文件"选择"系统生成CSR"，具体操作请参见：[系统生成CSR]。
- 如果申请证书时，"证书请求文件"选择"自己生成CSR"，具体操作请参见：[自己生成CSR]。
具体操作如下：
- **系统生成CSR**
  1. 在本地解压已下载的证书文件。
     下载的文件包含了"Apache"、"IIS"、"Nginx"、"Tomcat"、"Pem"5个文件夹和1个"domain.csr"文件，如[图1]所示。
     图1本地解压SSL证书   
     ![](https://support.huaweicloud.com/usermanual-ccm/zh-cn_image_0000002553536571.png "点击放大") 
  
  2. 从"*证书ID* _*证书绑定的域名* _Tomcat"文件夹内获得证书文件"*证书ID* _*证书绑定的域名* _server.jks"和密码文件"*证书ID* _*证书绑定的域名*_keystorePass.txt"。
   
- **自己生成CSR**
  1. 解压已下载的证书压缩包，获得"*证书ID* _*证书绑定的域名* _server.pem"文件。
     "*证书ID* _*证书绑定的域名*_server.pem"文件包括两段证书代码"-----BEGIN CERTIFICATE-----"和"-----END CERTIFICATE-----"，分别为服务器证书和中级CA证书。
     
  
  2. 使用OpenSSL工具，将pem格式证书转换为PFX格式证书，得到"server.pfx"文件。
     1. "pem"文件和生成CSR时的私钥"server.key"放在OpenSSL工具安装目录的bin目录下。
     
     2. 在OpenSSL工具安装目录的bin目录下，执行以下命令将pem格式证书转换为PFX格式证书，按"Enter"。 **openssl pkcs12 -export -out server.pfx -inkey server.key -in** *证书ID* _*证书绑定的域名* _**server.pem**
        回显信息如下：
        ```
        Enter Export Password:
        ```
        
     
     3. 输入PFX证书密码，按"Enter"。
        此处输入的密码为用户自定义密码，请根据自己的需求进行设置并输入密码。
        回显信息如下：
        ```
        Verifying - Enter Export Password:
        ```
        **请牢记此处输入的PFX证书密码。**后续设置JKS密码需要与此处设置的PFX密码保持一致，否则可能会导致Tomcat启动失败。
        为提高用户密码安全性，建议按以下复杂度要求设置密码：
        - 密码长度为8～32个字符。
        
        - 至少需要包含大写字母、小写字母、数字、空格、特殊字符\~\`!@#$%\^\&\*()_+\|{}:"\<\>?-=\\\[\];',./中的3种类型字符。
          
     
     4. 再次输入PFX证书密码，按"Enter"。 当系统没有回显任何错误信息，表示已在OpenSSL工具安装目录下成功生成"server.pfx"文件。
        
      
  
  3. 使用Keytool工具，将PFX格式证书文件转换成JKS格式，得到"server.jks"文件。
     1. 将[2]中生成的"server.pfx"文件复制到"%JAVA_HOME%/jdk/bin"目录下。
     
     2. 在"%JAVA_HOME%/jdk/bin"目录下，执行以下命令，按"Enter"。 keytool -importkeystore -srckeystore server.pfx -destkeystore server.jks -srcstoretype PKCS12 -deststoretype JKS
        回显信息如下：
        ```
        输入目标密钥库口令：
        ```
        
     
     3. 输入JKS证书密码，按"Enter"。 **请将JKS密码设置为与PFX证书密码相同的密码，否则可能会导致Tomcat启动失败。**
        回显信息如下：
        ```
        再次输入新口令：
        ```
        
     
     4. 再次输入JKS证书密码，按"Enter"。 回显信息如下：
        ```
        输入源密钥库口令：
        ```
        
     
     5. 输入[2.c]中设置PFX证书密码，按"Enter"。
        回显类似如下信息时，则表示转换成功，已在OpenSSL工具安装目录下成功生成"server.jks"文件。
        ```
        已成功导入别名1的条目。
        已完成导入命令：1个条目成功导入，0个条目失败或取消
        ```
        
     
     6. 在"%JAVA_HOME%/jdk/bin"目录下新建一个"keystorePass.txt"文件，将JKS的密码保存在该文件中。
      
  
  4. 将转换后的证书文件"server.jks"和新建的密码文件"keystorePass.txt"放在同一目录下。
   
 
 #### 步骤二：创建目录
在Tomcat的安装目录下创建"cert"目录，并且将证书文件"server.jks"和密码文件"keystorePass.txt"复制到"cert"目录中。
 #### 步骤三：修改配置文件
**修改配置文件前，请将配置文件进行备份，并建议先在测试环境中进行部署，配置无误后，再在现网环境进行配置，避免出现配置错误导致服务不能正常启动等问题，影响您的业务。**
各个版本的Tomcat配置SSL证书的整体流程基本一致，但受Java运行环境与配置文件格式差异影响，具体配置细节存在区别。下文以 Tomcat7为例，讲解配置文件的修改方法。
在Tomcat7安装证书的具体操作如下：
1. 在Tomcat安装目录conf目录下"server.xml"文件中找到如下参数：
   ```
   <!--
       <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
                  maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                  clientAuth="false" sslProtocol="TLS" />
       -->
   ```
   
2. 找到以上参数，去掉\<!- - 和 - -\>这对注释符。
3. 增加以下2个参数，请根据[表1]修改参数的值。
   ```
   keystoreFile="cert/server.jks"
   keystorePass="证书密码"
   ```
   完整配置参考如下，其余参数请根据实际情况进行修改：
   ```
   <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
                  maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
         keystoreFile="cert/server.jks"
         keystorePass="证书密码"
         clientAuth="false" sslProtocol="TLS" />
   ```
   **不要直接复制所有配置**，只需添加"keystoreFile"，"keystorePass"参数即可，其它参数请根据自己的实际情况修改。
    表1参数说明（一） 
   | 参数           | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|
   | port         | 指定服务器要使用的端口号，建议配置为"443"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | protocol     | 设置HTTP协议，保持缺省值即可。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | keystoreFile | "server.jks"文件存放路径，绝对路径和相对路径均可。示例：cert/server.jks                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | keystorePass | "server.jks"的密码。填写"keystorePass.txt"文件内的密码。 如果密码中包含**"\&"** ，请将其替换成**"\&amp;"**，以免配置不成功。示例： 如果keystorePass="Ix6**\&** APWgcHf72DMu"，则修改为keystorePass="Ix6**\&amp;**APWgcHf72DMu"。 |
   | clientAuth   | 是否要求所有的SSL客户出示安全证书，对SSL客户进行身份验证，保持缺省值即可。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      
   
4. 在Tomcat安装目录conf目录下"server.xml"文件中找到如下参数：
   ```
   <Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
   ```
   
5. 将"Host name"改为证书绑定的域名。 完整配置如下（以"www.domain.com"为例）：
   ```
   <Host name="www.domain.com"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
   ```
   
6. 修改完成后保存配置文件。
 
![](https://support.huaweicloud.com/usermanual-ccm/public_sys-resources/note_3.0-zh-cn.png)
若Tomcat启动失败，日志中出现"Keystore was tampered with, or password was incorrect"错误，请确认以下配置正确：
- "server.xml"中配置的证书密码为"keystorePass.txt"文件内的密码，文件密码的正确填写规则请参见[表1]。
- 确认"keystoreFile"的文件路径正确。
- 确认Tomcat运行用户对证书文件有读取权限。
 
 #### 步骤四：重启Tomcat
在Tomcat bin目录下执行**./shutdown.sh**命令停止Tomcat服务；
等待10秒后，再执行**./startup.sh**命令（如进程被守护进程自动拉起，则无需手动启动），启动Tomcat服务。
 #### 步骤五：效果验证
部署成功后，可在浏览器的地址栏中输入"https://域名"，按"Enter"。
如果浏览器地址栏显示安全锁标识，则说明证书安装成功。
![](https://support.huaweicloud.com/usermanual-ccm/zh-cn_image_0000002661550133.png)
- 如果网站仍然出现不安全提示，请参见[为什么部署了SSL证书后，网站仍然出现不安全提示？](https://support.huaweicloud.com/ccm_faq/ccm_01_0098.html)进行处理。
- 如果通过域名访问网站时，无法打开网站，请参见[为什么部署了SSL证书后，通过域名访问网站时，无法打开网站？](https://support.huaweicloud.com/ccm_faq/ccm_01_0099.html)进行处理。
- 如果仍未解决或出现其他问题，华为云商店提供SSL证书配置优化服务，专业工程师一对一服务，请直接单击[一对一咨询](https://marketplace.huaweicloud.com/contents/917d16b0-33c4-49d3-bfe9-dd9219ea084e#productid=00301-120142-0--0)进行购买，购买服务后，联系工程师进行处理。
 
#### 常见问题
[服务器IP地址变更后，原SSL证书是否仍可用？](https://support.huaweicloud.com/ccm_faq/ccm_01_0043.html)
[SSL证书支持在哪些地域部署？](https://support.huaweicloud.com/ccm_faq/ccm_01_0210.html)
[宝塔搭建的网站如何在后台添加SSL证书？](https://support.huaweicloud.com/ccm_faq/ccm_01_0211.html)
[SSL证书安装配置或使用中的相关问题，该如何解决？](https://support.huaweicloud.com/ccm_faq/ccm_01_0182.html)
[SSL证书的安装和配置提供咨询服务吗？](https://support.huaweicloud.com/ccm_faq/ccm_01_0068.html)
