在开发国密接口、配置HTTPS证书或排查证书兼容问题时,经常会遇到SM2证书和RSA证书。两者都属于公钥密码体系,但并不是简单地把密钥长度从2048位换成256位。 RSA与SM2解决的是密钥生成、签名、验签和加解密等密码学问题;X.509则负责定义证书如何保存主体、签发者、有效期、公钥和签名算法等信息。因此,SM2证书和RSA证书可以拥有相似的PEM外观,但内部算法标识、公钥结构和签名方式并不相同。 选择哪种证书,主要取决于目标系统的协议要求、密码产品支持、合规要求和运行环境,而不是单纯比较密钥长度。
先区分SM2、RSA和X.509分别是什么
RSA和SM2是两种不同的公钥密码算法。RSA的核心运算建立在大整数模运算之上,广泛用于数字签名、密钥封装和历史加密协议。SM2是一套基于椭圆曲线的公钥密码算法,包含数字签名、公钥加密和密钥交换等部分。 X.509不是具体的加密算法,而是一种证书结构。它负责保存证书主体、签发者、序列号、有效期、公钥、扩展字段和签名算法。 因此,“SM2证书”通常表示证书中保存的是SM2公钥,并使用相应的国密签名算法;“RSA证书”则表示证书中保存的是RSA公钥。两者都可能以BEGIN CERTIFICATE开头,不能只根据PEM头部判断算法。
-----BEGIN CERTIFICATE-----
证书的Base64编码内容
-----END CERTIFICATE-----理解SM2与RSA密钥长度为什么不同
RSA常见密钥长度包括2048位、3072位和4096位。密钥越长,签名或解密运算通常越慢,生成的公钥、私钥和证书体积也会增加。 SM2使用256位椭圆曲线参数,密钥和签名数据通常比RSA更紧凑。但不能因为256小于2048,就认为SM2安全性更低。两者基于不同的数学问题,密钥长度不能直接按数字大小比较。 在实际项目中,不应自行设计曲线参数或随意降低RSA密钥长度。RSA项目通常从2048位起步;SM2项目则应使用标准规定的曲线和参数,并确认目标密码设备或软件库支持相同的算法标识。
RSA常见密钥长度:2048 / 3072 / 4096 bit
SM2标准曲线长度:256 bit识别PKCS#1、PKCS#8和PUBLIC KEY格式
PEM只是使用Base64和头尾标记包装二进制DER数据的文本格式。看到BEGIN PRIVATE KEY时,通常表示PKCS#8私钥容器;看到BEGIN RSA PRIVATE KEY时,表示传统的RSA PKCS#1私钥;看到BEGIN PUBLIC KEY时,通常表示包含算法标识的SubjectPublicKeyInfo公钥结构。 PKCS#8可以承载不同算法的私钥,因此RSA和SM2私钥都可能显示相同的BEGIN PRIVATE KEY头部。要确认真实算法,需要解析内部ASN.1结构和算法OID,不能依靠文件扩展名或第一行文字判断。 ParseNest生成的RSA和SM2测试私钥使用PKCS#8格式,公钥使用PKIX格式,证书使用X.509 PEM格式,便于在不同系统之间传递和检查。
-----BEGIN RSA PRIVATE KEY----- RSA PKCS#1私钥
-----BEGIN PRIVATE KEY----- PKCS#8私钥,可能是RSA或SM2
-----BEGIN PUBLIC KEY----- PKIX公钥
-----BEGIN CERTIFICATE----- X.509证书根据目标系统判断应该使用哪一种证书
RSA拥有非常广泛的软件和协议兼容性,常见操作系统、浏览器、Java、OpenSSL、Web服务器和云平台通常都能直接处理RSA证书。如果目标是普通互联网HTTPS、跨平台接口或传统企业系统,RSA通常更容易部署。 SM2主要用于明确要求国密算法的系统,例如部分政务、金融、密码合规、国密网关、密码机和国产密码产品场景。即使两个系统都声称支持SM2,也仍要确认签名算法、证书扩展、用户标识、密钥容器和厂商接口是否一致。 如果需求文档没有明确要求SM2,不能仅因为SM2密钥较短就自行替换RSA。如果项目明确要求国密合规,也不能使用普通RSA证书代替SM2证书。
普通互联网和通用兼容场景 → 优先考虑RSA或目标CA支持的算法
明确国密要求的业务场景 → 按规范和设备要求使用SM2
混合系统 → 通过双证书、网关或兼容层处理区分测试证书和生产证书
在线工具生成的是自签名测试证书,适合接口联调、格式验证、自动化测试和开发环境。自签名证书没有公共CA或组织内部CA提供的信任关系,浏览器和操作系统通常不会自动信任。 生产私钥应当在受控环境中生成和保管,例如密码机、HSM、KMS、国密设备或受保护的离线系统。私钥不应通过聊天、工单、代码仓库或不受信任的网站传递。 ParseNest的证书生成与解析功能在服务器内存中完成,不持久化请求正文,但仍只推荐处理测试材料。生产私钥不应提交到任何在线解析服务。
开发联调:可以使用自签名测试证书
内部生产:使用组织CA和受保护的密钥流程
公共HTTPS:使用受浏览器信任的CA
国密生产:使用符合项目规范的密码设备和证书体系生成测试证书并检查内部算法
可以分别打开ParseNest的SM2和RSA证书工具,填写测试用的通用名称、组织名称和有效期,然后生成两组自签名证书。 将生成的证书放入解析区域,比较算法、密钥位数、签名算法、证书主题、签发者和有效期。RSA工具还可以切换2048、3072和4096位密钥,以观察证书体积和生成耗时的变化。 SM2相关定义可参考GB/T 32918系列标准;RSA密钥表示、签名和加密方案可参考RFC 8017。最终接入前,仍应以目标设备、协议和证书签发机构的要求为准。
https://parsenest.com/zh/tools/sm2-certificate-generator
https://parsenest.com/zh/tools/rsa-certificate-generator
https://parsenest.com/zh/tools/pem-certificate-decoder- SM2和RSA是公钥密码算法,X.509是证书结构,三者不是同一个概念。
- 不能仅根据PEM头部判断私钥或证书使用的真实算法。
- RSA常见密钥长度为2048、3072和4096位,SM2使用标准256位椭圆曲线参数。
- 普通互联网环境通常更重视RSA的广泛兼容性,国密项目则应按规范使用SM2。
- 在线生成的自签名证书只适合开发、联调和测试。
- 生产私钥应在HSM、KMS、密码机或受控离线环境中生成和保管。
- 选择证书算法时应优先遵循目标系统、证书签发机构和合规要求。