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