
# 在Nginx服务器上安装私有证书
本文以CentOS 7操作系统中的Nginx 1.7.8服务器为例介绍私有证书的安装步骤。
![](https://support.huaweicloud.com/tg-ccm/public_sys-resources/note_3.0-zh-cn.png)
由于服务器系统版本或服务器环境配置不同，在安装私有证书过程中使用的命令或修改的配置文件信息可能会略有不同，云证书与管理服务提供的安装证书示例，仅供参考，请以您的实际情况为准。
#### 应用场景
当内网Nginx业务需要实现HTTPS加密访问或者开启双向身份认证时，如果不在Nginx服务器部署私有证书，内网业务只能使用明文HTTP传输，数据存在窃听篡改风险。Nginx服务器如何正确加载私有证书，完成内网 HTTPS 或者双向认证业务部署？将下载的Nginx格式证书与私钥上传服务器，创建证书存放目录，修改"nginx.conf"配置，重载Nginx服务，即可完成私有证书部署。
本文面向运维工程师、开发人员，适用于企业内网Web服务、内网代理网关等使用Nginx的业务人员。
典型业务场景：内网Web系统HTTPS加密、Nginx网关双向认证、内网反向代理加密通信。
#### 前提条件
- 证书已签发。
- 已下载Nginx格式的私有证书，具体操作请参见[下载证书](https://support.huaweicloud.com/tg-ccm/ccm_01_0047.html)。
- 申请证书时选择的"证书请求文件"生成方式为"系统生成文件"。
 
#### 约束条件
- 证书安装前，务必在安装私有证书的服务器上开启"443"端口，同时在安全组增加"443"端口，避免安装后仍然无法启用HTTPS。
- 为了使客户端信任服务器证书，需要将服务器证书的根CA加入到客户端受信任的根证书颁发机构中，详细操作请参见[信任根CA](https://support.huaweicloud.com/tg-ccm/ccm_01_0348.html)。
- 如果一个域名有多个服务器，则每一个服务器上都要部署。
- 待安装证书的服务器上需要运行的域名，必须与证书的域名一一对应，即申请的是哪个域名的证书，则用于哪个域名。否则安装部署后，浏览器将提示不安全。
 
#### 操作步骤
在CentOS 7操作系统中的Nginx 1.7.8服务器上安装私有证书的流程如下所示：
[①获取文件] → [②创建目录并上传文件] → [③修改配置文件] → [④验证配置是否正确] → [⑤重启Nginx] → [⑥效果验证]
 #### 步骤一：获取文件
在本地解压已下载的证书文件。
获得证书文件"server.crt"和私钥文件"server.key"。
- "server.crt"文件包括两段证书代码"-----BEGIN CERTIFICATE-----"和"-----END CERTIFICATE-----"，分别为服务器证书和中级CA。
- "server.key"文件包括一段私钥代码"-----BEGIN RSA PRIVATE KEY-----"和"-----END RSA PRIVATE KEY-----"。
 
 #### 步骤二：创建目录并上传文件
在Nginx的安装目录下创建"cert"目录，并且将"server.key"和"server.crt"复制到"cert"目录下。
 #### 步骤三：修改配置文件
**修改配置文件前，请将配置文件进行备份，并建议先在测试环境中进行部署，配置无误后，再在现网环境进行配置，避免出现配置错误导致服务不能正常启动等问题，影响您的业务。**
配置Nginx中"conf"目录下的"nginx.conf"文件。
1. 找到如下配置内容：
   ```
   #server {
   #    listen       443 ssl;
   #    server_name  localhost;
   #    ssl_certificate      cert.pem;
   #    ssl_certificate_key  cert.key;
   #    ssl_session_cache    shared:SSL:1m;
   #    ssl_session_timeout  5m;
   #    ssl_ciphers  HIGH:!aNULL:!MD5;
   #    ssl_prefer_server_ciphers  on;
   #    location / {
   #        root   html;
   #        index  index.html index.htm;
   #    }
   #}
   ```
   
2. 删除行首的配置语句注释符号#。
   ```
   server {  
                listen              443 ssl;  
                server_name         localhost;
                ssl_certificate     cert.pem;  
                ssl_certificate_key cert.key;
                ssl_session_cache   shared:SSL:1m;  
                ssl_session_timeout 5m;  
                ssl_ciphers         HIGH:!aNULL:!MD5;         
                ssl_prefer_server_ciphers  on;  
                location / {  
                           root     html; 
                           index    index.html index.htm;  
                            }  
   }
   ```
   
3. 修改如下参数，具体参数修改说明如[表1]所示。
   ```
   ssl_certificate          cert/server.crt;    
   ssl_certificate_key      cert/server.key;
   ```
   完整的配置如下，其余参数根据实际情况修改：
   **不要直接复制所有配置**，参数中"ssl"开头的属性与证书配置有直接关系，其它参数请根据自己的实际情况修改。
   ```
   server {
           listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口，可能会导致Nginx无法启动。
           server_name  www.domain.com; #修改为您证书绑定的域名。
           ssl_certificate      cert/server.crt; #替换成您的证书文件的路径。
           ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。
           ssl_session_cache    shared:SSL:1m;
           ssl_session_timeout  5m;
           ssl_ciphers  HIGH:!aNULL:!MD5; #加密套件。
           ssl_prefer_server_ciphers  on;
           location / {
               root   html; #站点目录。
               index  index.html index.htm; #添加属性。
                      }  
   }
   ```
    表1参数说明 
   | 参数                  | 参数说明                                                                                                                                                                                                                                             |
   |:---|:---|
   | listen              | SSL访问端口号，设置为"443"。 配置HTTPS的默认访问端口为443。如果未配置HTTPS的默认访问端口，可能会导致Nginx无法启动。 |
   | server_name         | 证书绑定的域名。示例：www.domain.com                                                                                                                                                                                                                        |
   | ssl_certificate     | 证书文件"server.crt"。 设置为"server.crt"文件的路径，且路径中不能包含中文字符，例如"cert/server.crt"。 |
   | ssl_certificate_key | 私钥文件"server.key"。 设置为"server.key"的路径，且路径中不能包含中文字符，例如"cert/server.key"。 |
      
   
4. 修改完成后保存配置文件。
 
 #### 步骤四：验证配置是否正确
进入Nginx执行目录下，执行以下命令：
**sbin/nginx -t**
当回显信息如下所示时，则表示配置正确：
```
nginx.conf syntax is ok
nginx.conf test is successful
```
 #### 步骤五：重启Nginx
执行以下命令，重启Nginx，使配置生效。
cd /usr/local/nginx/sbin
./nginx -s reload
 #### 效果验证
部署成功后，可在浏览器的地址栏中输入"https://域名"，按"Enter"。
如果浏览器地址栏显示安全锁标识，则说明证书安装成功。
- 如果网站仍然出现不安全提示，请参见[为什么部署了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)进行购买，购买服务后，联系工程师进行处理。
 
#### 常见问题
- [私有证书有效期相关问题](https://support.huaweicloud.com/ccm_faq/ccm_01_0071.html)
- [私有证书管理服务是如何收费的？](https://support.huaweicloud.com/ccm_faq/ccm_01_0035.html)
- [私有证书签发后，能否停用私有CA？](https://support.huaweicloud.com/ccm_faq/ccm_01_0306.html)
- [如何解决夏令时切换冬令时，签发证书提示"证书有效期必须在父CA的有效期内"？](https://support.huaweicloud.com/ccm_faq/ccm_03_0030.html)
 
