搭建支持国密GmSSL的Nginx环境

准备

1、服务器准备:本文搭建使用的服务器是CentOS 7.6

2、安装包准备:需要GmSSL、国密Nginx,可通过互联网下载或者从 https://download.csdn.net/download/m0_46665077/89936158 下载国密GmSSL安装包和国密Nginx安装包。

服务器安装依赖包

服务器、安装包准备好了之后,先执行如下命令安装依赖包

复制代码
yum install -y lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed  

安装GmSSL

1.将安装包 GmSSL-master.zip 上传到目标机器 /root 目录下,并解压、编译安装,逐次执行如下命令

复制代码
unzip /root/GmSSL-master.zip
cd GmSSL-master/
./config --prefix=/usr/local/gmssl
make -j4 && sudo make install

2.调整软连接,主要调整 libssl.so.1.1 和 libcrypto.so.1.1 库文件链接 和 gmssl 快捷链接,不调整的执行gmssl version会报错

复制代码
ln -s /usr/local/gmssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/gmssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ln -sv /usr/local/gmssl/bin/gmssl  /usr/sbin/

3.查看gmssl版本,确保gmssl安装成功

复制代码
gmssl version

GmSSL安装成功参考如下截图

安装Nginx(支持国密的版本)

1.将Nginx安装包 nginx-1.21.6.zip 上传到目标机器 /root 目录下,并解压到 /usr/local/ 目录,进入nginx目录

复制代码
unzip -d /usr/local/ nginx-1.21.6.zip
cd /usr/local/nginx-1.21.6/

2.编译安装nginx

复制代码
./configure --prefix=/home/nginx 
--with-http_ssl_module 
--with-http_v2_module 
--with-http_realip_module 
--with-http_stub_status_module 
--with-http_gzip_static_module 
--with-pcre 
--with-stream 
--with-stream_ssl_module 
--with-stream_realip_module 
--with-openssl=/usr/local/gmssl

make -j4 &&sudo make install

3.创建nginx的软链接,并验证nginx版本

复制代码
ln -sv /home/nginx/sbin/nginx /usr/sbin
nginx -V

Nginx安装成功参考如下截图

至此,GmSSL、国密Nginx安装完成

  • GmSSL安装路径:/usr/local/gmssl
  • Nginx安装路径、配置文件路径:/home/nginx

Nginx配置

nginx开机启动

1.配置 nginx 开机自启,创建 /etc/systemd/system/nginx.service 的服务文件

复制代码
sudo vim /etc/systemd/system/nginx.service

#添加如下内容:
[Unit]
Description=Nginx HTTP Server
After=network.target

[Service]
Type=forking
ExecStart=/home/nginx/sbin/nginx -c /home/nginx/conf/nginx.conf
ExecReload=/home/nginx/sbin/nginx -s reload
ExecStop=/home/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2.保存文件,重新加载系统服务配置文件,并设置开机启动Nginx服务

复制代码
systemctl daemon-reload
systemctl start nginx
systemctl enable nginx  

约定证书命名和存放路径

约定证书命名和存放路径如下:

国密证书存放:/usr/local/gmssl/ssl/gm/

  • 签名证书命名:域名_sign.crt、域名_sign.key
  • 加密证书命名:域名_enc.crt、域名_enc.key

国际RSA证书存放:/usr/local/gmssl/ssl/rsa/

  • RSA证书命名:域名_rsa.crt、域名_rsa.key

    上传签名证书、加密证书、RSA证书到指定目录

    mkdir /usr/local/gmssl/ssl/gm

    mkdir /usr/local/gmssl/ssl/rsa

签发证书

可访问 https://www.gmcrt.cn/gmcrt/index.jsp 签发免费的国密测试证书,进行测试

创建nginx配置文件

1.创建 conf.d 文件(不创建的话,需要直接修改 nginx.conf 文件),让 nginx.conf 主配置文件支持读取以 conf 结尾的子配置文件

复制代码
mkdir /home/nginx/conf/conf.d

2.创建nginx配置文件

复制代码
vi  /home/nginx/conf/conf.d/test.conf

#test.conf添加的配置如下
server{
        listen 443 ssl;
        server_name test.com;
        
        #国际RSA证书配置,若不需要可单独删除此部分
        ssl_certificate /usr/local/gmssl/ssl/rsa/test_rsa.crt;
        ssl_certificate_key /usr/local/gmssl/ssl/rsa/test_rsa.key;
        
        #国密证书配置,先配置签名证书,再配置加密证书                           
        ssl_certificate /usr/local/gmssl/ssl/gm/test_sign.crt;
        ssl_certificate_key /usr/local/gmssl/ssl/gm/test_sign.key;        
        ssl_certificate /usr/local/gmssl/ssl/gm/test_enc.crt;
        ssl_certificate_key /usr/local/gmssl/ssl/gm/test_enc.key;
        
        ssl_session_cache    shared:SSL:1m;  #开启缓存 大小1M
        ssl_session_timeout  5m;     # 指定客户端可以重用会话参数的时间(超时之后不可使用)
        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECC-SM4-SM3:ECDHE-SM4-SM3:SM2-WITH-SMS4-SM3:ECDHE-SM2-WITH-SMS4-GCM-SM3:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_verify_client off;
        
        location / {
            root   html;
            index  index.html index.htm;
  
        }
}

启动nginx

复制代码
ginx -c /home/nginx/conf/nginx.conf
nginx -s reload        #重新加载nginx配置

访问测试

启动Nginx后进行访问测试

相关推荐
七夜zippoe2 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6484 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满4 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠4 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9034 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技5 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀6 小时前
Linux环境变量
linux·运维·服务器
zzzsde6 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º7 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~8 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化