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

iText7中ECDSA签名OID使用错误致ETSI合规校验失败问题咨询

结论

这是iText7签名模块的明确实现缺陷,必须使用和签名哈希算法匹配的ECDSA组合OID作为CMS结构中SignatureAlgorithmIdentifier字段的值,不能使用1.2.840.10045.2.1。

原因说明

  • 两个OID的适用场景完全不同:1.2.840.10045.2.1是ecPublicKey椭圆曲线公钥类型标识,仅允许出现在证书的SubjectPublicKeyInfo字段中,用于标记公钥所属的算法类型,本身不包含任何哈希算法信息,完全不符合签名算法标识符的字段定义要求。
  • 按照RFC 5652(CMS标准)、ETSI EN 319 122系列PDF电子签名标准的强制要求,SignatureAlgorithmIdentifier字段必须填写「哈希算法+签名算法」组合对应的全局唯一OID,你列出的四个带哈希后缀的OID才是ECDSA签名场景下的合规取值:
    public static final String ID_ECDSA_SHA224 = "1.2.840.10045.4.3.1";
    public static final String ID_ECDSA_SHA256 = "1.2.840.10045.4.3.2";
    public static final String ID_ECDSA_SHA384 = "1.2.840.10045.4.3.3";
    public static final String ID_ECDSA_SHA512 = "1.2.840.10045.4.3.4";
    
  • 你观察到的「Adobe Acrobat可正常校验、ETSI合规工具报错」的差异,来自两类工具的校验逻辑差异:

    Adobe Acrobat为了兼容历史上各类不规范的签名实现,做了大量容错逻辑,遇到签名算法OID填错的场景,会自动根据证书公钥类型、签名值ASN.1结构反推实际使用的签名算法,因此不会抛出错误。但这种容错不代表签名实现符合标准要求。
    ETSI合规校验工具严格遵循标准规则做匹配,没有额外容错逻辑,识别到字段中填入的是公钥类型OID后,无法拼接出合法的哈希算法+签名算法组合,就会抛出Unknown signature type requested: SHA256With1.2.840.10045.2.1错误。

修复注意事项

  • 不要直接修改SecurityIDs类中ID_ECDSA常量的取值,这个常量本身服务于公钥类型识别、证书解析逻辑,全局替换会导致其他依赖该常量的功能出现异常。
  • 正确修复方式是修改PdfPKCS7类中生成签名算法标识符的逻辑分支:当检测到签名使用的是EC密钥时,根据实际选用的哈希算法,动态匹配对应带哈希后缀的ECDSA OID填入SignatureAlgorithmIdentifier字段即可。
  • 填入上述组合OID时,算法标识符的参数字段必须省略,不要沿用原逻辑填充NULL,否则会触发新的ETSI合规校验错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:51:56