You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSSL 1.1.1验证证书返回bad signature但0.9.8正常是什么原因?

证书验签不兼容问题排查

证书本身的可能问题

  • 签名填充格式不符合规范:BouncyCastle生成证书时如果RSA签名使用的PKCS#1 v1.5填充格式不符合RFC 8017标准,比如填充字段的固定位错误、摘要算法标识编码不规范,就会触发error:04091068:rsa routines:int_rsa_verify:bad signature报错。OpenSSL 0.9.8和浏览器的验签逻辑对这类非规范填充做了兼容处理,会自动忽略部分错误完成验签,但OpenSSL 1.1.1对填充规则的校验非常严格,任何不符合规范的填充都会直接返回验签失败。
  • 公钥DER编码不规范:生成证书时如果RSA公钥的模数、指数字段的DER编码存在非规范问题,比如多余的前导零、长度字段编码错误,0.9.8版本会自动修正这类编码问题完成验签,1.1.1会直接拒绝非规范编码的公钥参数,返回签名错误。
  • 签名算法组合未显式声明:使用BouncyCastle生成证书时如果只指定了RSA作为签名算法,没有显式指定配套的摘要算法(比如SHA256withRSA),老版本BouncyCastle可能会生成和1.1.1默认校验逻辑不匹配的签名参数,导致验签失败。
  • 签名值字节序错误:部分旧版本BouncyCastle导出签名值时可能出现大小端字节序错误,0.9.8对签名值的字节序容错性更高,1.1.1会严格按照规范校验字节序,直接报错。

两个版本OpenSSL的验证逻辑差异

  • 校验严格度不同:OpenSSL 0.9.8为了兼容大量早期非规范实现的证书,在验签逻辑中加入了很多容错处理,甚至可以自动修正部分编码、填充错误。1.1.1为了修复历史安全漏洞、符合最新RFC规范要求,移除了绝大多数非规范容错逻辑,只要任何一项校验不符合标准就直接返回验签失败。
  • 安全策略默认值不同:1.1.1默认启用了更严格的安全策略,对签名算法、公钥长度的要求都远高于0.9.8,同时对算法参数的合法性校验做了全量升级。
  • 底层验签逻辑重构:1.1.1完全重构了RSA验签的底层实现,拆分了填充校验、摘要校验的步骤,0.9.8的耦合验签逻辑里的兼容处理没有在重构后的代码里保留,也导致了大量老的非规范证书无法通过验证。

内容的提问来源于stack exchange,提问作者eilane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:24:03