
# 在Nginx服务器上安装国密标准SSL证书
本文以CentOS 7操作系统中的Nginx 1.24.0服务器为例介绍国密标准（SM2）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证书，具体操作请参见[下载SSL证书](https://support.huaweicloud.com/usermanual-ccm/ccm_01_0391.html)。
- 若域名解析指向的服务器位于中国内地则需进行ICP[备案](https://support.huaweicloud.com/qs-domain/domain_qs_280000.html)，否则将导致网站无法访问。
 
#### 约束条件
- 证书安装前，务必在安装SSL证书的服务器上开启"443"端口，同时在安全组增加"443"端口，避免安装后仍然无法启用HTTPS。
- 如果一个域名有多个服务器，则每一个服务器上都要部署。
- 待安装证书的服务器上需要运行的域名，必须与证书的域名一一对应，即购买的是哪个域名的证书，则用于哪个域名。否则安装部署后，浏览器将提示不安全。
- 待安装证书为国密标准证书。
 
#### 操作步骤
在CentOS 7操作系统中的Nginx 1.24.0服务器上安装SSL证书的流程如下所示：
[①环境配置] → [②获取文件] → [③修改配置文件] → [④验证配置是否正确] → [⑤重启Nginx] → [⑥效果验证]
 #### 步骤一：环境配置
1. 准备gmssl_openssl。 访问[GMSSL](https://www.gmssl.cn/gmssl/index.jsp)页面，在左侧导航树中选择"国密web服务器"，单击"国密web服务器下载"页签，下载openssl国密版，拷贝到/root/目录并解压。
   **tar xzfm gmssl_openssl_b2025.xxxx_x64.tar.gz -C /usr/local**
   以上命令中**gmssl_openssl_b2025.xxxx_x64.tar.gz** 请替换为实际下载的包名**。**
   则/usr/local/gmssl为国密版openssl目录。
   
2. 准备Nginx。
   1. 下载Nginx-1.24.0。
   
   2. 解压下载的Nginx。 **tar zxfm nginx-1.24.0.tar.gz**
      
   
   3. 进入Nginx的目录nginx-1.24.0/。
   
   4. 修改配置文件。 **vi auto/lib/openssl/conf**
      将全部$OPENSSL/.openssl/修改为$OPENSSL/后，保存修改。
      
    
3. 执行如下命令配置参数。
   ![](https://support.huaweicloud.com/usermanual-ccm/public_sys-resources/note_3.0-zh-cn.png)
   如果报错"C compiler cc is not found"，则需要安装pcre-devel包，安装命令：**yum -y install gcc pcre-devel openssl openssl-devel**。
   ```
   ./configure \
   --without-http_gzip_module \
   --with-http_ssl_module \
   --with-http_stub_status_module \
   --with-http_v2_module \
   --with-file-aio \
   --with-openssl="/usr/local/gmssl" \
   --with-cc-opt="-I/usr/local/gmssl/include" \
   --with-ld-opt="-lm"
   ```
   
4. 编译安装。
   ```
   make install
   ```
   则/usr/local/nginx为生成的国密版Nginx目录。
   
 
 #### 步骤二：获取文件
安装证书前，需要获取证书文件和密码文件，请根据申请证书时选择的"证书请求文件"生成方式来选择操作步骤：
- 如果申请证书时，"证书请求文件"选择"系统生成CSR"，具体操作请参见：[系统生成CSR]。
- 如果申请证书时，"证书请求文件"选择"自己生成CSR"，具体操作请参见：[自己生成CSR]。
具体操作如下：
- **系统生成CSR**
  1. 在本地解压已下载的证书文件。 下载的文件包含了"Apache"、"Nginx"、"Pem" 3个文件夹和1个"domain.csr"文件，如图[本地解压SSL证书]所示。
     图1本地解压SSL证书   
     ![](https://support.huaweicloud.com/usermanual-ccm/zh-cn_image_0000002553543095.png "点击放大") 
  
  2. 从"*证书ID* _*证书绑定的域名* _Nginx"文件夹内获得证书文件"*证书ID* _*证书绑定的域名* _server.crt"、私钥文件"*证书ID* _*证书绑定的域名* _server.key"、"*证书ID* _*证书绑定的域名* _encrypt.crt"和私钥文件"*证书ID* _*证书绑定的域名* _ encrypt.key"。
     - "*证书ID* _*证书绑定的域名*_server.crt"文件包括两段证书代码"-----BEGIN CERTIFICATE-----"和"-----END CERTIFICATE-----"，分别为服务器证书和中级CA。
     
     - "*证书ID* _*证书绑定的域名*_server.key"文件包括一段私钥代码"-----BEGIN EC PRIVATE KEY-----"和"-----END EC PRIVATE KEY-----"。
     
     - "*证书ID* _*证书绑定的域名*_ encrypt.crt"文件包括一段加密证书代码"-----BEGIN CERTIFICATE-----"和"-----END CERTIFICATE-----"。
     
     - "*证书ID* _*证书绑定的域名*_ encrypt.key"文件包括一段私钥代码"-----BEGIN EC PRIVATE KEY-----"和"-----END EC PRIVATE KEY-----"。
      
   
- **自己生成CSR**
  1. 解压已下载的证书压缩包，获得"*证书ID* _*证书绑定的域名* _server.pem"文件。
     "*证书ID* _*证书绑定的域名*_server.pem"文件包括两段证书代码"-----BEGIN CERTIFICATE-----"和"-----END CERTIFICATE-----"，分别为服务器证书和中级CA证书。
     
  
  2. 将"*证书ID* _*证书绑定的域名*_server.pem"的后缀名修改为"crt"，即"server.crt"。
  
  3. 将"*证书ID* _*证书绑定的域名*_encrypt.pem"的后缀名修改为"crt"，即"encrypt.crt"。
  
  4. 将"server.crt"，"encrypt.crt"，"encrypt.key"和生成CSR时的私钥"server.key"放在任意文件夹内。
   
在/usr/local/nginx/conf目录下创建"cert"目录，并且将"server.key"、"server.crt"、"encrypt.key"和"encrypt.crt"复制到"cert"目录下。
 #### 步骤三：修改配置文件
**修改配置文件前，请将配置文件进行备份，并建议先在测试环境中进行部署，配置无误后，再在现网环境进行配置，避免出现配置错误导致服务不能正常启动等问题，影响您的业务。**
配置/usr/local/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. 修改如下参数，具体参数修改说明如表[参数说明]所示。
   ```
   ssl_certificate          cert/server.crt;     
   ssl_certificate_key      cert/server.key; 
   ssl_certificate          cert/enc_server.crt;     
   ssl_certificate_key      cert/enc_server.key;
   ```
   完整的配置如下，其余参数根据实际情况修改：
   **不要直接复制所有配置** ，参数中"ssl"开头的属性与证书配置有直接关系，其它参数请根据自己的实际情况修改。
   ```
   server { .com; #修改为您证书绑定的域名。 cert/server.crt; #替换成您的签名证书文件的路径。 cert/server.key; #替换成您的签名证书私钥文件的路径。 cert/encrypt.crt; #替换成您的加密证书文件的路径。 cert/encrypt.key; #替换成您的加密证书私钥文件的路径。
           listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口，可能会导致Nginx无法启动。 
           server_name  test
           ssl_certificate          cert/server.crt;     
           ssl_certificate_key      cert/server.key; 
           ssl_certificate          cert/enc_server.crt;     
           ssl_certificate_key      cert/enc_server.key;
           ssl_session_cache    shared:SSL:1m; 
           ssl_session_timeout  5m; 
           ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
           ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA:DES-CBC3-SHA:ECC-SM4-CBC-SM3:ECC-SM4-GCM-SM3; 
           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"文件的路径，且路径中不能包含中文字符，例如"/usr/local/nginx/conf/cert/server.crt"。  - 加密证书的证书文件"enc_server.crt"：设置为"enc_server.crt"文件的路径，且路径中不能包含中文字符，例如"/usr/local/nginx/conf/cert/enc_server.crt"。   |
   | ssl_certificate_key | - 签名证书的私钥文件"server.key"：设置为"server.key"文件的路径，且路径中不能包含中文字符，例如"/usr/local/nginx/conf/cert/server.key"。  - 加密证书的私钥文件"enc_server.key"：设置为"enc_server.key"文件的路径，且路径中不能包含中文字符，例如"/usr/local/nginx/conf/cert/enc_server.key"。            |
      
   

3. 修改完成后保存配置文件。
 
 #### 步骤四：验证配置是否正确
进入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"。
如果浏览器地址栏显示安全锁标识，则说明证书安装成功。
![](https://support.huaweicloud.com/usermanual-ccm/zh-cn_image_0000002661562083.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)
