用户如果用双证书和双栈部署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`变量,区分访问使用的是国密还是国际算法链路,便于审计和问题排查。

如用户正在规划具体的改造项目吗?如果方便告诉我你的部署环境(比如使用的服务器软件、云平台),我可以提供更具针对性的配置建议。