国密优先策略是国密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.    监控告警:建立对国密握手成功率、证书有效期的监控告警机制,这对通过密评至关重要。