久诚SSL

什么是国密 SSL 证书(SM2/SM3/SM4 算法)?在信创合规要求下,如何配置 Nginx 支持国密算法,并实现与浏览器“双证书”自适应协商?

什么是国密 SSL 证书(SM2/SM3/SM4 算法)?在信创合规要求下,如何配置 Nginx 支持国密算法,并实现与浏览器“双证书”自适应协商?

国密 SSL 证书并非传统 RSA 证书的简单“国产替代品”,而是基于我国自主研发的商用密码算法体系构建的完整安全机制。在《密码法》和等保2.0等合规要求下,政务、金融等关键基础设施必须完成国密改造。

国密算法体系的核心构成
国密 SSL 证书采用 SM 系列算法替代国际通用算法,主要包括三大核心组件:
SM2(非对称加密):基于椭圆曲线离散对数问题(ECDLP)设计。256位 SM2 密钥提供的安全强度等效于 RSA 3072位,且签名速度提升约 4 倍,密钥体积减少 60%。
SM3(杂凑算法):输出 256 比特哈希值,抗碰撞性优于 SHA-256,用于数字签名和完整性校验。
SM4(对称加密):128位分组密码,支持硬件级加速,在国产 CPU 上的加解密吞吐量极高,用于数据传输阶段的加密。

Nginx 支持国密算法的底层改造
由于官方 Nginx 和标准 OpenSSL 不支持国密算法,必须在服务器端进行底层改造。通常的做法是引入国密版 OpenSSL(如 GmSSL、Tongsuo 等开源分支)并重新编译 Nginx。在编译时,需通过 --with-openssl 指定国密库路径,使 Nginx 具备处理国密算法套件的能力。

国密双证书机制与 Nginx 配置
与国际标准最大的区别在于,国密 TLS 协议(TLCP)强制要求使用“双证书机制”——即服务器必须同时部署签名证书(Sign)和加密证书(Enc),且两者的私钥必须独立生成,不可复用。

在 Nginx 中配置国密双证书,需使用国密版 Nginx 特有的指令:
server {

listen 443 ssl;
server_name domain.com;

# 国密签名证书与私钥
ssl_certificate     /path/to/server_sign.crt;
ssl_certificate_key /path/to/server_sign.key;

# 国密加密证书与私钥(国密特有指令)
ssl_certificate_enc     /path/to/server_enc.crt;
ssl_certificate_key_enc /path/to/server_enc.key;

# 指定国密协议与密码套件
ssl_protocols TLSv1.1; # TLCP 对应 TLS 1.1
ssl_ciphers ECC-SM4-SM3:ECDHE-SM4-SM3; 

}

实现与浏览器的“双证书”自适应协商(双栈模式)
当前,绝大多数国际主流浏览器(如 Chrome、Safari)及移动端操作系统并未内置国密根证书,如果仅部署国密证书,这些客户端将无法访问。因此,生产环境必须采用“国际+国密双栈共存”方案。

其核心原理是在 Nginx 中同时加载 RSA 国际证书和 SM2 国密双证书,并在密码套件(ssl_ciphers)中同时列出国际套件与国密套件。当客户端发起 TLS 握手时,Nginx 会根据客户端的能力自动协商:
如果用户使用支持国密协议的浏览器(如 360安全浏览器、红莲花浏览器等),服务器将优先使用 SM2 证书建立国密加密通道。
如果用户使用 Chrome、Firefox 等不支持国密的浏览器,系统会无缝降级,自动回退至 RSA 算法继续通信。

通过这种自适应协商机制,企业既能满足国内严格的密码合规审查,又能保障全球用户的无障碍访问。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »