部署国密证书,关键在于解决一个核心矛盾:国密根证书未被国际主流操作系统和浏览器默认信任。因此,最佳实践的核心思路是双轨并行:一方面,在国密生态内建立完整的信任链;另一方面,通过“双证书”方案保障更广泛的用户访问。
一、 国密信任链的基本概念与挑战
和传统的HTTPS一样,国密证书的信任也依赖于一条完整的证书链。这条链从服务器证书开始,经过一级或多级中间证书,最终追溯到一个被客户端(如浏览器)预置信任的根证书。
国密部署的主要挑战在于,权威国密CA的根证书,通常只预置在国产操作系统(如统信UOS、麒麟)和国密浏览器(如360安全浏览器国密版、红莲花浏览器)等特定环境中,而没有被微软、苹果、Mozilla等国际根证书项目纳入。
二、根证书预置的最佳实践
根证书预置,即将信任锚点(根证书)提前部署到客户端。根据你的受众,主要有三种策略:
1. 面向国密生态(推荐策略):直接使用已预置国密根证书的国产浏览器和操作系统。这是最简单、最省力的方式,能自动信任合规CA签发的国密证书,无需任何手动配置。例如,360安全浏览器(国密版)、红莲花浏览器,以及麒麟、统信UOS等国产操作系统。
2. 面向通用浏览器(如Chrome/Firefox):
手动导入:对于个人用户或少量终端,可在浏览器“证书管理”中,手动将国密根证书导入到“受信任的根证书颁发机构”列表。
企业级批量部署:对于大型企业,可以通过组策略(Active Directory) 将根证书批量推送到域内所有终端。
定制浏览器:如有开发能力,可基于Chromium二次开发,将国密根证书预置进浏览器安装包。社区已有相关实践,如GmSSL项目定制的Chromium浏览器。
3. 面向特定应用或设备:在API调用、IoT设备等非浏览器场景,需要在应用程序或设备的信任库中预置根证书。例如,HarmonyOS等国产操作系统,会预装通过其审核的国密CA证书。
三、信任链建立的最佳实践
在服务端正确配置完整的证书链,是建立信任的基础。
1. 获取完整的证书文件:从CA机构获取证书时,通常会得到服务器证书和中间证书。你需要将服务器证书、所有中间证书,以及根证书(可选,但建议包含)按顺序合并成一个完整的证书链文件(如 `fullchain.pem`)。
2. 服务端正确配置:在Nginx、Apache等Web服务器配置中,必须指定这个完整的证书链文件,而不仅仅是服务器证书。以下是Nginx的配置示例:
```nginx
# 对于国密双证书场景
ssl_certificate /path/to/your_full_chain_sign.crt; # 签名证书链
ssl_certificate_key /path/to/your_private_sign.key; # 签名私钥
ssl_certificate /path/to/your_full_chain_enc.crt; # 加密证书链
ssl_certificate_key /path/to/your_private_enc.key; # 加密私钥
```
3. 检查与验证:部署后,应使用 `openssl s_client -connect yourdomain.com:443 -showcerts` 等命令检查服务端是否正确发送了完整的证书链。
四、双证书部署:实现平滑过渡的最佳策略
为兼顾国密合规与全球通用性,“国密+国际”双证书部署是目前业界公认的最佳实践。
核心思想:在服务器上同时部署一套国密(SM2)证书和一套国际(RSA/ECC)证书。
工作原理:服务器根据客户端的握手请求,自动选择最合适的证书。
国密浏览器(如360国密版)访问 → 使用国密证书链,建立国密加密通道。
普通浏览器(如Chrome)访问 → 使用国际证书链,建立标准HTTPS加密通道。
这种方式能确保国密改造的平滑进行,让所有用户都能无障碍访问。
五、总结
总的来说,国密证书的信任问题没有“一键解决”的方案。最佳实践是采取分层策略:
对外服务:采用双证书部署,用国际证书保证广泛兼容性,用国密证书满足合规与自主可控的要求。
对内或特定场景:优先选用已预置国密根证书的国产浏览器和操作系统,从源头解决信任问题。
通用场景:通过手动导入或企业级批量部署的方式,将国密根证书添加到通用浏览器或系统中。