更新时间:2024-11-22 GMT+08:00
分享

在Nginx服务器上安装国密标准SSL证书

本文以CentOS 7操作系统中的Nginx 1.8.0服务器为例介绍国密标准(SM2)SSL证书的安装步骤,您在安装国密标准证书时可以进行参考。证书安装好后,您的Web服务器才能支持SSL通信,实现通信安全。

由于服务器系统版本或服务器环境配置不同,在安装SSL证书过程中使用的命令或修改的配置文件信息可能会略有不同,云证书管理服务提供的安装证书示例,仅供参考,请以您的实际情况为准。

如参考文档安装证书后,HTTPS仍然不生效或遇到其他问题,请单击一对一咨询购买SSL证书配置优化服务,联系专业工程师为您排查具体问题。

前提条件

  • 证书已签发且“证书状态”为“已签发”。
  • 已下载SSL证书,具体操作请参见下载SSL证书

约束条件

  • 证书安装前,务必在安装SSL证书的服务器上开启“443”端口,同时在安全组增加“443”端口,避免安装后仍然无法启用HTTPS。
  • 如果一个域名有多个服务器,则每一个服务器上都要部署。
  • 待安装证书的服务器上需要运行的域名,必须与证书的域名一一对应,即购买的是哪个域名的证书,则用于哪个域名。否则安装部署后,浏览器将提示不安全。
  • 待安装证书为国密标准证书。

操作步骤

在CentOS 7操作系统中的Nginx 1.8.0服务器上安装SSL证书的流程如下所示:

①环境配置②获取文件③修改配置文件④验证配置是否正确⑤重启Nginx⑥效果验证

步骤一:环境配置

  1. 准备gmssl_openssl

    下载页面https://www.gmssl.cn/gmssl/index.jsp中的openssl国密版

    拷贝到/root/目录并解压

    tar xzfm gmssl_openssl_1.1_b2024_x64_1.tar.gz -C /usr/local

    则/usr/local/gmssl为国密版openssl目录

  2. 准备nginx
  3. 下载nginx-1.18.0
  4. tar zxfm nginx-1.18.0.tar.gz
  5. cd httpd-2.4.46
  6. vi auto/lib/openssl/conf
  7. 将全部$OPENSSL/.openssl/修改为$OPENSSL/并保存
  8. ./configure \
  9. --without-http_gzip_module \
  10. --with-http_ssl_module \
  11. --with-http_stub_status_module \
  12. --with-http_v2_module \
  13. --with-file-aio \
  14. --with-openssl="/usr/local/gmssl" \
  15. --with-cc-opt="-I/usr/local/gmssl/include" \
  16. --with-ld-opt="-lm"
  17. 然后make install
  18. 则/usr/local/nginx为生成的国密版nginx目录
  19. 注:可能需要安装pcre-devel包。

步骤二:获取文件

安装证书前,需要获取证书文件和密码文件,请根据申请证书时选择的“证书请求文件”生成方式来选择操作步骤:

  • 如果申请证书时,“证书请求文件”选择“系统生成CSR”,具体操作请参见:系统生成CSR
  • 如果申请证书时,“证书请求文件”选择“自己生成CSR”,具体操作请参见:自己生成CSR

具体操作如下:

  • 系统生成CSR
    1. 在本地解压已下载的证书文件。

      下载的文件包含了“Apache”、“Nginx” 2个文件夹和1个“domain.csr”文件,如图本地解压SSL证书所示。

      图1 本地解压SSL证书
    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;   

    完整的配置如下,其余参数根据实际情况修改:

    server {
            listen       443 ssl; #配置HTTPS的默认访问端口为443。如果在此处未配置HTTPS的默认访问端口,可能会导致Nginx无法启动。 
            server_name  test
    .com; #修改为您证书绑定的域名。
            ssl_certificate      /usr/local/nginx/conf/
    cert/server.crt; #替换成您的签名证书文件的路径。
            ssl_certificate_key  /usr/local/nginx/conf/
    cert/server.key; #替换成您的签名证书私钥文件的路径。
            ssl_certificate      /usr/local/nginx/conf/
    cert/encrypt.crt; #替换成您的加密证书文件的路径。
            ssl_certificate_key  /usr/local/nginx/conf/
    cert/encrypt.key; #替换成您的加密证书私钥文件的路径。
            ssl_session_cache    shared:SSL:1m; 
            ssl_session_timeout  5m; 
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #加密套件。 
            ssl_prefer_server_ciphers  on; 
            location / { 
                root   html; #站点目录。 
                index  index.html index.htm; #添加属性。 
                       }   
    }

不要直接复制所有配置,参数中“ssl”开头的属性与证书配置有直接关系,其它参数请根据自己的实际情况修改。

表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”。

ssl_certificate_key

私钥文件“server.key”。

设置为“server.key”的路径,且路径中不能包含中文字符,例如“/usr/local/nginx/conf/cert/server.key”。

  1. 修改完成后保存配置文件。

步骤四:验证配置是否正确

进入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”。

如果浏览器地址栏显示安全锁标识,则说明证书安装成功。

相关文档