网站升级至 ECC+SM2 国密 SSL 证书指南

要将网站从 Google SSL 证书升级为支持 ECC+SM2 国密算法,并在零信浏览器上正常显示,需要完成以下关键步骤:

一、证书申请与准备

  1. 选择支持双算法的 CA 机构

    • 推荐选择通过国家密码管理局认证的国内 CA 机构,如 JoySSL、沃通 WoTrus 或天威诚信,这些机构支持同时签发国际算法 (RSA/ECC) 和国密算法 (SM2) 证书

    • 根据需求选择证书类型:DV(域名验证)、OV(组织验证) 或 EV(扩展验证)

  2. 生成密钥对与 CSR 文件

    • 国际算法部分:使用 OpenSSL 生成 RSA 或 ECC 密钥对和 CSR 文件

    # RSA密钥对生成
    openssl genrsa -out rsa_private.key 2048
    openssl req -new -key rsa_private.key -out rsa.csr
    
    # ECC密钥对生成
    openssl ecparam -genkey -name prime256v1 -out ecc_private.key
    openssl req -new -key ecc_private.key -out ecc.csr
    • 国密算法部分:使用 GMSSL 工具包生成 SM2 密钥对和 CSR 文件

    gmssl ecparam -genkey -name sm2p256v1 -out sm2_private.key
    gmssl req -new -key sm2_private.key -out sm2.csr -sm3
  3. 完成验证并下载证书包

    • 完成域名验证 (DNS、文件或 IP 验证)

    • 下载证书包,通常包含:

      • .crt(国际算法证书)

      • .sm2(国密算法证书)

      • 中间证书链 (用于浏览器信任链补全)

二、服务器配置

  1. Nginx 服务器配置示例

    server {
        listen 443 ssl;
        server_name example.com;
     
        # 国际算法配置
        ssl_certificate /path/to/international.crt;
        ssl_certificate_key /path/to/international.key;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:...";
     
        # 国密算法配置(需Nginx 1.25.0+及GMSSL模块)
        listen 443 gmssl;
        ssl_certificate /path/to/sm2.crt;
        ssl_certificate_key /path/to/sm2.key;
        ssl_protocols GMSSL;
        # 推荐密码套件
        ssl_ciphers "ECDHE_SM2_WITH_SM4_128_CBC_SM3";
    }
    • 如果无法同时监听 443 端口,可采用双端口方案 (如 443-TLS/9443-GMSSL)

  2. 启用 SSL 卸载功能

    • 在 SSL 模板中启用 SSL 卸载功能

    • 选择国密 SSL 协议,启用双向认证 (如需)

    • 密码套件选择ECDHE-SM4_128_CBC_SM3

三、零信浏览器兼容性配置

  1. 确保证书链完整

    • 国密 SSL 证书必须包含完整的证书链,包括中间证书和根证书

    • 检查证书中的 AIA(授权信息访问) 字段,确保可访问且包含正确的签发 CA 证书信息

  2. 证书字段要求

    • 必须包含 "证书策略"(Certificate Policy) 字段,说明签发依据

    • 密钥用法 (Key Usage) 必须正确设置:签名证书为 "Digital Signature",加密证书为 "Key Encipherment"

    • 增强密钥用法 (Extended Key Usage) 必须包含 "服务器身份验证"(1.3.6.1.5.5.7.3.1)

  3. 测试验证

    • 使用零信国密浏览器访问网站,检查是否显示国密加密标识

    • 验证国际算法部分是否仍能在 Chrome、Firefox 等主流浏览器中正常显示

四、运维与安全最佳实践

  1. 证书生命周期管理

    • 设置证书到期前 30 天提醒,启动续期流程

    • 考虑使用 ACME 协议或 CA 机构 API 实现证书自动更新

  2. 性能监控与优化

    • 使用 Prometheus+Grafana 监控 TLS 握手耗时

    • 在高并发场景下优先使用 ECC/SM2 算法,可较 RSA 节省 30%CPU 资源

  3. 安全加固措施

    • 禁用弱密码套件 (如 RC4、DES)

    • 启用 OCSP Stapling 减少证书状态查询延迟

    • 定期检查证书透明日志,确保证书签发行为合规

五、常见问题解决方案

  1. 浏览器不信任国密证书

    • 原因:部分浏览器未内置国密根证书

    • 解决方案:

      • 引导用户安装 CA 机构根证书

      • 同时部署国际算法作为降级方案

      • 推荐用户使用预置国密根证书的浏览器 (如零信浏览器、360 安全浏览器国密版)

  2. 内网环境部署

    • 内网 IP 证书签发:选择支持内网场景的 CA 机构 (如 JoySSL 企业版)

    • 内网浏览器信任:部署零信浏览器,已预置信任内网专用国密 SM2 根证书

  3. 兼容性问题

    • 现象:服务器无法同时监听 443 端口 (TLS 与 GMSSL 冲突)

    • 解决方案:

      • 采用双端口方案 (如 443-TLS/9443-GMSSL)

      • 升级至支持协议复用的服务器版本

通过以上步骤,您的网站可以顺利完成从 Google SSL 证书到 ECC+SM2 国密证书的升级,并确保在零信浏览器等国密浏览器中正常显示加密标识。这一升级不仅符合国家密码法规要求,还能提供更高的安全性和更好的性能表现。

其实吧,上面的是教程。但是我不是这样能的哦。

我是直接腾讯云 EO 同时上传了 ECC 证书和 SM2 证书,然后同时启用的。然后在白山云也是这样操作的哈,所以现在也是双证书,并且还有认证。这已经是最快的方法了。下面是显示的效果图。当然你按照上面的方法也可以,不过就是麻烦,并且还有各种问题。


网站升级至 ECC+SM2 国密 SSL 证书指南
https://uniomo.com/archives/wang-zhan-sheng-ji-zhi-ecc-sm2-guo-mi-ssl-zheng-shu-zhi-nan
作者
雨落秋垣
发布于
2025年10月22日
许可协议