申请国密证书前,最关键的一点是:标准版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,并严格遵循其官方文档进行操作。