国密优先策略是国密SSL双证书部署的核心,其关键在于服务端同时部署国密(SM2)和国际(RSA/ECC)两套证书,自动适配不同客户端:
客户端适配:支持国密的国产浏览器(如360企业安全浏览器)会优先发起国密握手。
自动回退:国际浏览器会发起标准TLS握手,服务器自动回退至国际证书建立通道。
一、主流服务端配置示例
软件/环境 核心组件/版本 关键配置/方法
Nginx 需编译支持国密的版本,如nginx-tongsuo或nginx-gm。 并列加载SM2和RSA证书,并通过`ssl_ciphers`指定国密套件。
Apache 原生不支持双证书自动切换。 无法通过官方模块实现。建议使用SNI分离或上层API网关。
Tomcat/Java 原生不支持,但可通过替换JCE/JSSE组件支持。 替换`gmjce.jar`等组件,在`server.xml`中指定`GMSSLImplementation`。
二、Nginx 双证书配置示例
编译安装好nginx-tongsuo后,在配置文件中添加以下内容即可:
nginx
server {
listen 443 ssl;
server_name example.com;
# 加载国密证书
ssl_certificate /path/to/sm2.crt;
ssl_certificate_key /path/to/sm2.key;
# 加载RSA证书
ssl_certificate /path/to/rsa.crt;
ssl_certificate_key /path/to/rsa.key;
# 指定协议并优先使用国密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECC-SM4-CBC-SM3:ECDHE-SM4-CBC-SM3:RSA-SM4-CBC-SM3:HIGH:!aNULL:!MD5;
ssl_ecdh_curve sm2p256v1;
ssl_prefer_server_ciphers on;
}
`ssl_prefer_server_ciphers on` 这一指令是实现“服务端优先”的关键,确保开启“国密优先”。
三、客户端配置要点
国产浏览器(如360安全浏览器、红莲花浏览器、奇安信可信浏览器)原生支持国密,但部分可能需要开启“国密优先”开关。
360安全浏览器:需在高级设置中找到并开启“国密优先”开关。
其他国产浏览器(如红莲花):默认已内置国密根证书并开启支持,通常无需额外配置。
国际浏览器(如Chrome、Edge、Firefox):默认**不支持**国密,会直接使用RSA证书,无需也无法进行相关配置。
四、验证国密策略是否生效
部署后,务必进行验证:
使用国密浏览器:用开启“国密优先”的浏览器访问网站,页面应正常加载,通常地址栏会有特殊安全标识。
使用命令行工具:使用支持国密的`openssl`客户端尝试连接:
bash
openssl s_client -connect your-domain.com:443 -tls1_2 -cipher ECC-SM4-CBC-SM3
注意事项
1. 证书合规性:国密证书必须**使用国密根CA机构签发,自签名证书不被主流国密浏览器信任。
2. 加密套件完整性:`ssl_ciphers` 必须同时包含国密套件和国际算法,否则可能导致国际客户端无法访问。
3. 私钥格式:确保私钥文件为未加密的PEM格式,否则Nginx启动会报错。
4. 中间证书链:完整配置SM2中间证书链,缺少会导致国密浏览器握手失败。
5. 性能考虑:部署双证书会增加内存和CPU开销,需评估服务器性能。
6. 监控告警:建立对国密握手成功率、证书有效期的监控告警机制,这对通过密评至关重要。