搭建支持国密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后进行访问测试

相关推荐
小峰编程8 小时前
二进制安装Nginx——详细
linux·运维·服务器·nginx·云原生
刚入坑的新人编程8 小时前
Linux-cgdb
linux·运维·服务器
九硕智慧建筑一体化厂家8 小时前
什么是楼宇自控?全面解析楼宇自控与楼宇自控系统的作用
大数据·运维·人工智能·网络协议·制造
丿罗小黑8 小时前
【2026】Openclaw使用经验(阿里云服务器)
运维·服务器·chrome
桌面运维家8 小时前
Linux VHD 虚拟磁盘更新指南:高效管理与优化
linux·运维·数据库
进击切图仔8 小时前
Linux 挂载操作
linux·运维·服务器
武汉禹力自动化科技8 小时前
ABB气动执行器DP020SR / DP050SR / DP110SR区别详解 | 禹力自动化科技有限公司
运维·科技·自动化
dashizhi20158 小时前
服务器如何记录共享文件访问日志、查看用户访问共享文件的行为日志?
运维·服务器
tongxh4238 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
FirstFrost --sy8 小时前
仿mudou库one thread one loop式并发服务器实现
运维·服务器·开发语言·c++