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

基于iText7的C#两步PDF签名(GOST算法)Adobe验证无效问题

解决iText7两步GOST签名后Adobe提示“签名无效”的问题

针对你用iText7实现两步GOST签名后Adobe提示“文档自签名后已被修改或损坏”的问题,核心原因通常是哈希计算不匹配、GOST算法配置错误或签名嵌入时破坏了PDF结构,以下是具体排查和修复步骤:

1. 确保GOST算法的iText支持配置正确

  • 必须引入iText的GOST扩展包(itext7-gost),默认iText核心库不包含GOST算法实现。
  • 初始化时注册GOST加密提供者:
    GostCryptoUtil.RegisterGostProviders();
    
  • 签名时使用的哈希/签名算法要匹配GOST标准OID:
    • GOST3411-2012-256哈希OID:1.2.643.2.2.35.1
    • GOST3410-2012签名OID:1.2.643.2.2.36.1

2. 验证预处理阶段的哈希计算逻辑

两步签名的核心是待签名哈希必须是PDF签名覆盖范围的字节哈希,而非整个文档哈希:

  • 不要自行读取文件字节计算哈希,必须使用PdfSigner.GetDocumentBytesForSigning()获取iText预计算的待签名字节流。
  • 确保哈希计算时明确指定GOST算法,而非默认的SHA系列:
    var hashAlgorithm = HashAlgorithm.Create("GOST3411-2012-256");
    var hash = hashAlgorithm.ComputeHash(signer.GetDocumentBytesForSigning());
    
  • 预处理后的PDF文档在嵌入签名前不能有任何修改(包括保存时的编码转换、额外字节写入),要保证预处理文档的字节流和嵌入阶段读取的完全一致。

3. 检查空签名域与签名容器的配置

  • 创建空签名域时,要指定与后续签名匹配的算法参数,避免默认SHA算法导致的不兼容:
    var externalBlankContainer = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.ETSI_CAdES_detached);
    
  • 自定义签名容器时,必须在ModifySigningDictionary中设置正确的GOST算法OID到签名字典:
    public void ModifySigningDictionary(PdfDictionary signDic)
    {
        signDic.Put(PdfName.Filter, PdfName.Adobe_PPKLite);
        signDic.Put(PdfName.SubFilter, PdfName.ETSI_CAdES_detached);
        signDic.Put(PdfName.DigestAlgorithm, new PdfName("1.2.643.2.2.35.1")); // GOST3411-2012-256 OID
    }
    

4. 确认签名嵌入阶段的正确性

  • 嵌入签名时使用PdfSigner.SignDeferred()方法,必须传入预处理时的签名域名称,确保签名写入正确位置。
  • 外部返回的签名值要先Base64解码为原始字节,再传入签名容器,不要直接写入Base64字符串。
  • 签名容器的Sign()方法应直接返回签名字节,无需重新计算哈希(预处理阶段已完成哈希计算)。

5. 辅助验证定位问题

  • 查看Adobe Acrobat签名验证的详细信息,确认是哈希不匹配、算法不被信任还是PDF结构损坏。
  • 用iText的SignatureUtil验证签名有效性,对比Adobe的错误信息缩小范围:
    var util = new SignatureUtil(new PdfReader("signed.pdf"));
    var signatureNames = util.GetSignatureNames();
    foreach (var name in signatureNames)
    {
        Console.WriteLine($"Signature {name} valid: {util.VerifySignature(name)}");
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:25:04