用户如果用双证书和双栈部署SSL证书,其“双证书+双栈”部署是当前兼顾国产密码合规与全球业务兼容性的主流方案。其核心思想是在服务器端同时配置SM2和RSA两套证书及算法支持,根据客户端的能力自动协商最优安全通道,实现“用户无感知、安全不降级”的平滑改造。
一、方案背景与核心价值
部署双证书方案主要源于两个核心驱动力:
合规性要求:随着《密码法》、等保2.0、密评等政策法规的落地,政务、金融、能源等关键基础设施必须使用自主可控的国产密码技术(SM2/SM3/SM4)。
兼容性挑战:尽管国密算法在安全性和自主性上优势明显,但主流国际浏览器(如Chrome、Firefox)和操作系统尚未原生支持。若仅部署国密证书,将导致大量普通用户无法访问。
因此,双证书方案成为在满足合规的同时,保障系统全球可访问性的最佳实践。
二、工作原理:智能协商机制
这个方案之所以能平滑运行,关键在于TLS协议层的密码套件协商机制。服务器就像一个“双语”服务员,能根据访客使用的“语言”自动切换。
下面这张图清晰地展示了这个智能适配的流程:
mermaid
flowchart TD
A[用户访问网站] --> B{浏览器类型判断};
B -->|国密浏览器<br>(如360国密版、红莲花)| C[发起国密握手请求<br>携带国密算法套件];
B -->|国际浏览器<br>(如Chrome、Firefox)| D[发起标准TLS握手<br>携带国际算法套件];
C --> E[服务器端];
D --> E;
subgraph E [服务器:双证书部署]
direction LR
E1[国密SM2证书链]
E2[国际RSA证书链]
end
E --> F{协商与适配};
F -->|匹配国密套件| G[启用SM2/SM3/SM4加密<br>建立国密SSL通道];
F -->|匹配国际套件| H[启用RSA/AES/SHA加密<br>建立标准SSL通道];
G --> I[加密连接建立成功];
H --> I[加密连接建立成功];
关键点说明:
1. 国密用户访问:当使用360安全浏览器(国密版)、红莲花浏览器等访问时,浏览器会自动发起带有国密算法套件的握手请求,服务器则响应并启用国密SM2证书,建立全链路国产算法的加密通道。部分浏览器地址栏还会显示“GM”或“国密”标识。
2. 国际用户访问:当使用Chrome等标准浏览器访问时,服务器通过标准TLS握手协商,自动调用RSA证书和算法套件,确保访问畅通无阻。
3. 降级机制:如果国密证书配置有误或协商失败,系统也能智能回退至国际算法,保证服务不中断。
三、部署要点与配置示例
在具体实施上,以最常用的Nginx为例,需要进行一些特殊改造和配置。
1. 服务器环境准备
关键改造:官方原版的Nginx+OpenSSL不支持国密算法。你需要使用集成了国密算法的OpenSSL分支版本(如BabaSSL、Tongsuo、GmSSL)重新编译Nginx,或使用沃通等CA提供的国密模块。
基础开通:确保服务器443端口开放,域名已正确解析。
2. 证书获取
向具备国密证书签发资质的CA(如CFCA、沃通、天威诚信等)同时申请RSA算法和SM2算法的SSL证书,绑定同一域名。
3. Nginx配置示例
以下是一个典型的配置片段,展示了如何在同一个`server`块中加载两套证书:
`nginx
server {
listen 443 ssl;
server_name yourdomain.com;
# --- 国密证书配置 (SM2) ---
ssl_certificate /etc/nginx/certs/yourdomain_sm2_chain.pem; # 包含站点证书和中间级证书
ssl_certificate_key /etc/nginx/certs/yourdomain_sm2.key;
# --- 国际证书配置 (RSA) ---
ssl_certificate /etc/nginx/certs/yourdomain_rsa_chain.pem;
ssl_certificate_key /etc/nginx/certs/yourdomain_rsa.key;
# 配置支持的协议和加密套件,国密套件在前以便优先协商
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-SM4-GCM-SM3:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
# 其他SSL配置(如OCSP Stapling、HSTS等)
# ...
}
4. 验证部署
使用Chrome等国际浏览器访问,查看证书是否为RSA证书。
使用红莲花等国密浏览器访问,查看证书是否为SM2证书,并观察是否有国密标识。
四、高阶考虑与挑战
信任链管理:国密证书和国际证书的信任链是独立的。国密证书必须由预置在国密浏览器中的国密根证书来验证,两者不可交叉混用。
OCSP装订:为提升性能,可以配置OCSP Stapling。需要将两套证书的中间证书链合并到一个文件中,并通过`ssl_trusted_certificate`指令加载。
现代协议支持:目前国密方案对HTTP/2、HTTP/3(QUIC)的支持还在完善中,如果业务强依赖这些特性,需重点验证。
监控与排障:建议通过日志记录`$ssl_cipher`变量,区分访问使用的是国密还是国际算法链路,便于审计和问题排查。
如用户正在规划具体的改造项目吗?如果方便告诉我你的部署环境(比如使用的服务器软件、云平台),我可以提供更具针对性的配置建议。