繁体   English   中英

通过ITextSharp进行PDF客户端签名

[英]Pdf client side signing via ITextSharp

我想通过iTextSharp模拟客户端签名。

我有有效的证书,这些证书已导出到2个文件中-.cer文件(公共密钥)和.pfx文件(带有私钥),pfx文件用作密钥库。 在“服务器”上使用的公钥。

我也有一个pdf文件-例如https://yadi.sk/i/6vuDlEPXi7oYz 我的代码复制在以下要点中: https : //gist.github.com/alex-t0/f446ccb5ca5e8936b778

概括地说,有3种方法:

  • ServerSidePrepare(准备哈希,使用公共密钥)
  • ClientSideSign(通过私钥签名)
  • SaveSignedDocumentOnServer(将签名合并到服务器上的pdf中)。

但是此代码会生成pdf文档,该签名无效。 使用pdf中的方法MakeSignature.SignDetached签名有效时,一切正常。

如何调试并发现问题? 还是pdf客户端签名的其他示例? 与服务器部分,在C#中。

您在GetEncodedPKCS7调用中使用了错误的摘要。

当您第一次(正确)构建经过身份验证的属性时

sgn.getAuthenticatedAttributeBytes(messageHash, now, null, null, CryptoStandard.CMS)

但是稍后在实际构建PKCS7签名容器时,您会

result.Sign.GetEncodedPKCS7(result.Hash, result.Now, null, null, null, CryptoStandard.CMS);

这两个调用的参数必须相同(但后一个调用中的其他ITSAClient参数除外)。 否则,最终的认证属性(建于GetEncodedPKCS7 )是从原有的(建于不同getAuthenticatedAttributeBytes ),将需要一个不同的签名值。

因此,您应该在DTO中包含byte[] messageHash SaveSignedDocumentOnServer并在SaveSignedDocumentOnServer使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM