申请国密证书前,最关键的一点是:标准版OpenSSL默认不支持国密算法。因此,确认OpenSSL的版本和国密功能支持情况是首要任务,这直接决定了后续所有操作能否成功。
核心事实:标准OpenSSL默认不支持国密
无论是广泛使用的OpenSSL 1.1.1还是3.x版本,它们的内核默认并不包含SM2(非对称加密)、SM3(哈希)和SM4(对称加密)等国密算法。直接用标准版OpenSSL尝试生成国密证书,会遇到“`Unknown algorithm`”或“`unknown curve name`”等错误。
可行的方案选择:三条路径实现国密支持
要使用国密算法,通常有以下三种方案:
路径一:使用OpenSSL 3.0+(有限支持,需谨慎)
官方支持情况:从OpenSSL 3.0开始,国密算法(SM2/SM3/SM4)作为算法库(`libcrypto`)的一部分被整合进主分支。但这部分支持**仅限于密码运算底层**,并不支持在TLS协议层使用国密套件。
关键操作差异:生成SM2私钥的命令与旧版不同,应使用 `openssl genpkey -algorithm SM2`。
风险提示:虽然有基础支持,但实际生产中直接使用OpenSSL 3.0+配置国密TLS可能遇到问题,例如旧教程中指定的曲线名称在新版本中可能导致握手失败。
路径二:使用GmSSL(国密专用分支,推荐)
简介:GmSSL是北京大学发起的OpenSSL国密优化分支,对SM2/SM3/SM4算法有更完善的支持。
优势:它是为支持国密而专门设计的,功能最全面,能很好地支持国密双证书(签名证书和加密证书)体系。
注意事项:需要注意,原GmSSL项目已停止维护。建议优先选择其活跃的社区分支或更新版本。
路径三:使用信创操作系统发行版(生产环境首选)
简介:许多信创操作系统(如华为OpenEuler)已经将国密支持整合到其官方软件源中,提供了如 `openssl-gm` 这样的软件包。
优势:这是**生产环境最稳妥的选择**。这些经过商业或社区验证的版本,通常有更好的稳定性和长期支持。
申请前必须确认的清单
在正式申请国密证书前,请逐项确认以下事项:
1. 明确OpenSSL类型:确认你使用的是标准OpenSSL、GmSSL还是信创发行版。
2. 验证国密算法支持:运行 `openssl list -public-key-algorithms` 或 `gmssl list -public-key-algorithms`,检查输出中是否包含 `SM2`。
3. 确认版本与兼容性:
若用GmSSL,确保版本在3.0以上。
若用OpenSSL 3.0+,需明确其TLS层支持有限,并准备好应对潜在问题。
若用信创发行版,确保已安装正确的国密支持包(如 `openssl-gm`)。
4. 与服务端软件兼容:确认你的Web服务器(如Nginx)版本是否支持国密。例如,Nginx 1.25.x系列对SM2套件有更好的支持。
总结与建议
方案 核心特点 适用场景 关键命令/操作
OpenSSL 3.0+ 算法库支持,TLS层支持有限 技术验证、非生产环境 `openssl genpkey -algorithm SM2`
GmSSL 国密专用分支,功能全面 开发、测试、部分生产环境 `gmssl version` 验证,`gmssl ecparam -name sm2p256v1` 生成密钥
信创发行版 官方集成,稳定可靠 生产环境首选 使用系统包管理器安装 `openssl-gm` 等
总而言之,申请国密证书前必须明确,你的OpenSSL环境必须通过上述三种方式之一获得国密算法支持。 最稳妥的做法是,在生产环境中优先考虑使用信创操作系统发行版或GmSSL,并严格遵循其官方文档进行操作。