{{item}}
{{item.title}}
{{items.productName}}
{{items.price}}/年
{{item.title}}
部警SSL证书可实现网站HTTPS加密保护及身份的可信认证,防止传输数据的泄露或算改,提高网站可信度和品牌形象,利于SEO排名,为企业带来更多访问量,这也是网络安全法及PCI合规性的必备要求
前往SSL证书当前主流 Web 服务器(Nginx、Apache)默认不支持国密算法套件,需通过定制化编译或插件扩展实现 GMSSL 适配。本文系统梳理国密SSL证书与SM2算法的技术特性,分步骤详解 Nginx 与 Apache 的国密配置流程,涵盖环境准备、证书部署、参数优化与有效性验证,为企业级国密合规改造提供可落地的技术方案。
国密SSL证书遵循《GMT 0024-2014 信息安全技术 公钥基础设施 数字证书格式》标准,核心构成包括:
根据《GMT 0022-2014 信息安全技术 密码应用标识规范》,GMSSL 通信需支持以下核心算法套件:
| 套件标识 | 加密组件 | 适用场景 |
|---|---|---|
| ECDHE-SM2-WITH-SM4-GCM-SM3 | 密钥交换:ECDH(SM2 曲线)加密:SM4-GCM哈希验证:SM3 | 主流场景(高安全性 + 性能平衡) |
| ECDHE-SM2-WITH-SM4-CBC-SM3 | 密钥交换:ECDH(SM2 曲线):SM4-CBC > 哈希验证:SM3 | 兼容旧版国密客户端 |
| SM2-WITH-SM4-GCM-SM3 | 密钥交换:RSA(国密适配):SM4-GCM > 哈希验证:SM3 | 无 ECDHE 支持的极简场景 |
需注意:禁止使用 “SM2-WITH-SM4-CBC-MD5” 等弱哈希组合,且 SM4 加密模式优先选择 GCM(认证加密),避免 CBC 模式的 padding oracle 漏洞风险。
Nginx 官方版本不支持 GMSSL,需基于 “国密补丁” 重新编译,或使用已集成国密模块的开源分支(如 Tengine、OpenResty 国密版)。本文以 “Nginx+OpenSSL 国密补丁” 方案为例,详解配置流程。
(1)依赖组件安装(以 CentOS 7 为例)
# 安装编译依赖
yum install -y gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
# 下载国密版OpenSSL(推荐1.1.1g-gm分支,支持SM2/SM3/SM4)
wget https://github.com/guanzhi/GmSSL/archive/refs/tags/2.5.4.tar.gz -O GmSSL-2.5.4.tar.gz
tar -zxvf GmSSL-2.5.4.tar.gz && cd GmSSL-2.5.4
# 编译安装国密OpenSSL
./config --prefix=/usr/local/gmssl shared
make && make install
# 下载Nginx源码(推荐1.20.x稳定版)
wget http://nginx.org/download/nginx-1.20.2.tar.gz && tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2(2)国密 Nginx 编译配置
# 配置编译参数(指定国密OpenSSL路径,启用GMSSL模块)
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-openssl=/usr/local/src/GmSSL-2.5.4 \
--with-openssl-opt="enable-gmssl" \
--add-module=./nginx-http-gmssl-module # 国密扩展模块(需提前下载)
# 编译安装
make && make install
# 验证国密支持(出现SM2/SM4算法标识即为成功)
/usr/local/nginx/sbin/nginx -V 2>&1 | grep "gmssl"(1)证书文件准备
国密证书通常包含 3 个文件(由国密 CA 机构颁发):
将证书文件放置于 Nginx 安全目录(权限设置为 600,避免泄露):
mkdir -p /usr/local/nginx/conf/gmssl
cp server.crt server.key root.crt /usr/local/nginx/conf/gmssl/
chmod 600 /usr/local/nginx/conf/gmssl/*(2)Nginx 国密配置(nginx.conf)
http {
include mime.types;
default_type application/octet-stream;
# 国密SSL全局配置
ssl_protocols TLSv1.2 TLSv1.3; # 禁用TLSv1.0/1.1(弱协议)
# 优先启用国密算法套件,后兼容传统算法
ssl_ciphers ECDHE-SM2-WITH-SM4-GCM-SM3:ECDHE-SM2-WITH-SM4-CBC-SM3:ECDHE-RSA-WITH-AES-256-GCM-SHA384;
ssl_prefer_server_ciphers on; # 服务器主导算法选择
ssl_session_cache shared:SSL:10m; # 会话缓存优化
ssl_session_timeout 10m;
server {
listen 443 ssl; # 国密HTTPS默认端口
server_name gm.example.com; # 证书绑定域名
# 国密证书配置
ssl_certificate /usr/local/nginx/conf/gmssl/server.crt;
ssl_certificate_key /usr/local/nginx/conf/gmssl/server.key;
ssl_trusted_certificate /usr/local/nginx/conf/gmssl/root.crt; # 根证书信任链
# 国密扩展配置(可选,强制客户端使用国密算法)
gmssl on;
gmssl_ciphers ECDHE-SM2-WITH-SM4-GCM-SM3; # 仅允许国密套件
location / {
root html;
index index.html index.htm;
}
}
}(1)服务启动与状态检查
# 启动国密Nginx
/usr/local/nginx/sbin/nginx
# 检查端口监听(443端口应处于LISTEN状态)
netstat -tulnp | grep 443(2)国密通信验证(使用国密客户端)
# 安装国密版curl(gmssl-curl)
yum install -y gmssl-curl
# 验证国密握手(返回200 OK且包含SM2算法标识)
gmssl-curl -v https://gm.example.com 2>&1 | grep "SM2"常见问题:
Apache 通过 “mod_ssl_gm” 模块实现国密支持,需先安装国密版 OpenSSL,再编译加载国密模块。以下以 Apache 2.4.x 为例,详解配置流程。
(1)国密 OpenSSL 依赖配置
同 3-1 步骤,确保/usr/local/gmssl路径下已安装国密版 OpenSSL,且系统环境变量指向国密库:
echo "export LD_LIBRARY_PATH=/usr/local/gmssl/lib:\$LD_LIBRARY_PATH" >> /etc/profile
source /etc/profile(2)Apache 与国密模块编译
# 下载Apache源码(2.4.54版本)
wget https://archive.apache.org/dist/httpd/httpd-2.4.54.tar.gz && tar -zxvf httpd-2.4.54.tar.gz
# 下载国密模块(mod_ssl_gm)
wget https://github.com/immortalwrt/mod_ssl_gm/archive/refs/tags/v1.0.0.tar.gz -O mod_ssl_gm-1.0.0.tar.gz
tar -zxvf mod_ssl_gm-1.0.0.tar.gz && cp -r mod_ssl_gm-1.0.0/* httpd-2.4.54/modules/ssl/
# 编译Apache(指定国密OpenSSL路径)
cd httpd-2.4.54
./configure \
--prefix=/usr/local/apache \
--enable-ssl \
--enable-so \
--with-ssl=/usr/local/gmssl \
--enable-mods-shared=all
make && make install(1)证书路径配置
Module ssl_module>
Listen 443
_:443>
ServerName gm.example.com
DocumentRoot "/usr/local/apache/htdocs"
# 国密证书配置
SSLCertificateFile "/usr/local/apache/conf/gmssl/server.crt"
SSLCertificateKeyFile "/usr/local/apache/conf/gmssl/server.key"
SSLCACertificateFile "/usr/local/apache/conf/gmssl/root.crt"
# 国密算法套件配置
SSLCipherSuite ECDHE-SM2-WITH-SM4-GCM-SM3:ECDHE-SM2-WITH-SM4-CBC-SM3
SSLProtocol TLSv1.2 TLSv1.3
SSLHonorCipherOrder on # 按配置顺序优先选择国密套件
# 国密模块启用(强制GMSSL通信)
GMSSLEnable on
GMSSLCipherSuite ECDHE-SM2-WITH-SM4-GCM-SM3
/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</IfModule>(2)配置加载与服务启动
# 启用国密模块(在httpd.conf中添加)
echo "LoadModule ssl_gm_module modules/mod_ssl_gm.so" >> /usr/local/apache/conf/httpd.conf
# 加载SSL配置文件
echo "Include conf/extra/httpd-ssl.conf" >> /usr/local/apache/conf/httpd.conf
# 启动Apache服务
/usr/local/apache/bin/apachectl start
# 验证国密模块加载
/usr/local/apache/bin/apachectl -M | grep "ssl_gm"(1)国密握手验证
# 使用国密工具验证算法套件
gmssl s_client -connect gm.example.com:443 -cipher ECDHE-SM2-WITH-SM4-GCM-SM3
# 成功标志:出现“Cipher is ECDHE-SM2-WITH-SM4-GCM-SM3”(2)性能优化配置
国密SSL证书与SM2算法的适配是企业实现密码合规的关键环节,Nginx 与 Apache 作为主流 Web 服务器,需通过定制化编译或模块扩展实现国密支持。本文通过详细的环境准备、配置实操与验证步骤,提供了可落地的国密部署方案,同时补充安全优化要点,兼顾合规性与安全性。
Dogssl.com拥有20年网络安全服务经验,提供构涵盖国际CA机构Sectigo、Digicert、GeoTrust、GlobalSign,以及国内CA机构CFCA、沃通、vTrus、上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!