问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

国密证书安装部署指南:以Nginx为例

创作时间:
作者:
@小白创作中心

国密证书安装部署指南:以Nginx为例

引用
1
来源
1.
https://www.cnblogs.com/zhanshuai/p/18423597

一、准备

  1. 下载后证书文件后,上传到服务器里面

国密证书标准有四个证书文件的,分别是:签名公钥证书文件、签名私钥证书文件、加密公钥证书文件和加密私钥证书文件。

我这边使用的是数安时代GDCA的证书,数安时代品牌的国密证书,签名私钥文件和加密私钥使用的是同一个私钥文件 数安时代GDCA证书目录下有三个证书文件,以sign_chain.crt结尾的证书文件是签名公钥11文件,以encrypt_chain.crt结尾的是加密公钥文件。以key文件结尾的是签名证书文件和加密证书文件共用的私钥文件

  1. 下载需要的安装包,上传到服务器里面
  • 下载原版的nginx的二进制包,(本人使用nginx-1.24.0版本)
  • 下载数安时代专属的openssl模块插件(gdcassl.tar.gz)
  • 安装包下载地址:https://openssl.zhanshuai.com.cn/ (如果需要可以直接访问下载)

3.服务器安安装必备的gcc-c++、pcre-devel 和zlib-devel软件

Centos系统:可以直接使用yum命令安装

yum install gcc-c++ pcre-devel zlib-devel

Ubuntu/Debiam系统上面安装

sudo apt update
sudo apt install build-essential libpcre3-dev zlib1g-dev

二、部署环境

把gdca的国密组件解压到/usr/local/目录下

tar xf gdcassl.tar.gz -C /usr/local

解压nginx的二进制安装包

tar xf nginx-1.24.0.tar.gz

进入解压后的nginx编译安装目录下

cd nginx-1.24.0

修改nginx编译安装指向的openssl版本和模块

vim auto/lib/openssl/conf

找到这四个选项参数,然后修改一下

CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"

修改成:

CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"

开始编译安装nginx,编译的时候需要加上国密组件的相关模块

./configure \
--prefix=/usr/local/nginx \
--without-http_gzip_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-file-aio \
--with-openssl="/usr/local/gdcassl" \
--with-cc-opt="-I/usr/local/gdcassl/include" \
--with-ld-opt="-lm"

上述步骤执行完成后,make install,编译成功后nginx默认的生成配置文件的目录在/usr/local/nginx里。

进入/usr/local/nginx/目录下,nginx的启动文件在/usr/local/nginx/sbin/目录下,先查看nginx配置文件中是否存报错,如果没有则启动nginx。

cd /usr/local/nginx/sbin
./nginx -t

如图所示:则代表没问题

./nginx

启动nginx

使用命令查看nginx的http80端口是否存在,如果存在则,浏览器访问测试一下,如果说是云服务器,则直接使用公网IP访问即可,如果是内网服务器,则需要在本地的hosts文件里添加本地解析

ss -ntl | grep 80

三、配置证书

编辑nginx.conf主配置文件

server {
    listen 443 ssl; #配置https端口
    server_name test.zhanshuai.com.cn; #配置访问域名
    ssl_ciphers SM2-WITH-SMS4-SM3:ECDH:AESGCM:HIGH:MEDIUM:!RC4:!DH:!MD5:!aNULL:!eNULL; #配置国密的加密套件
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #配置TLS协议
    ssl_verify_client off; #是否开启客户端证书验证

    #先配置签名公钥证书和签名私钥证书
    ssl_certificate /usr/local/nginx/ssl/server_sign_chain.crt;
    ssl_certificate_key /usr/local/nginx/ssl/server.key;

    #配置加密公钥证书和加密私钥证书
    ssl_certificate /usr/local/nginx/ssl/server_encrypt_chain.crt;
    ssl_certificate_key /usr/local/nginx/ssl/server.key;

    location / {
        root html;
        index index.html index.htm;
    }
}

把证书文件上传到nginx配置文件里面指向的证书文件所在的

检测nginx配置文件语法。如果没问题则重启nginx

/usr/local/nginx/sbin/nginx -t

四、启动nginx,国密浏览器访问测试

之前nginx已经重启了,只需要重新加载一下nginx的配置文件就行了,(如果不生效,建议把nginx进程杀掉,然后在重启nginx)

/usr/local/nginx/sbin/nginx -s reload

重启成功后,查看服务器里面配置的https端口是否存在

ss -ntl

(如果服务器端口较多,可以使用grep命令过滤一下你配置的https端口: ss -ntl | grep 443)

使用国密浏览器访问网站,(常见的国密浏览器有:奇安信、零信、360企业版、红莲花国密浏览器和密信等......),

由于我这个是自签的国密证书,所以国密浏览器访问会提示证书不受信,但是查看证书和签名算法是国密的SM2或者SM3就代表部署成功了。

网站双算法证书配置(国密证书和国际证书)

配置双算法域名网站(注意:要先把之前的国密证书配置成功后,才能配置双算法证书)

编辑nginx.conf主配置文件

server {
    listen 443 ssl; #配置https端口
    server_name test.zhanshuai.com.cn; #配置访问域名

    #配置双算法的加密套件
    ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:SM4-GCM-SM3";

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #配置TLS协议
    ssl_verify_client off; #是否开启客户端证书验证

    #先配置签名公钥证书和签名私钥证书
    ssl_certificate /usr/local/nginx/ssl/server_sign_chain.crt;
    ssl_certificate_key /usr/local/nginx/ssl/server.key;

    #配置加密公钥证书和加密私钥证书
    ssl_certificate /usr/local/nginx/ssl/server_encrypt_chain.crt;
    ssl_certificate_key /usr/local/nginx/ssl/server.key;

    #配置国密算法证书
    ssl_certificate /usr/local/nginx/ssl/test.zhanshuai.com.cn.pem; #公钥
    ssl_certificate_key /usr/local/nginx/ssl/test.zhanshuai.com.cn.key; #私钥

    location / {
        root html;
        index index.html index.htm;
    }
}

把证书文件上传到nginx配置文件里面指向的证书文件所在的

检测nginx配置文件语法。如果没问题则重启nginx

/usr/local/nginx/sbin/nginx -t

配置完成启动后,像谷歌、360、火狐等一会常见的浏览器访问网站查看证书的话会显示的是国际RSA算法的证书

像一些国密浏览器访问网站,例如:零信,奇安信,红莲花等一些国密浏览器,访问网站查看证书则是SM2算法的国密证书

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号