C# 通过ITextSharp进行Pdf客户端签名
我想通过iTextSharp模拟客户端签名 我有有效的证书,它在两个文件中导出-.cer文件(公钥)和.pfx文件(带私钥),pfx文件用作密钥库。“服务器”上使用的公钥 我还有一个pdf文件,例如。我的代码在此摘要中复制: 简而言之,有3种方法:C# 通过ITextSharp进行Pdf客户端签名,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我想通过iTextSharp模拟客户端签名 我有有效的证书,它在两个文件中导出-.cer文件(公钥)和.pfx文件(带私钥),pfx文件用作密钥库。“服务器”上使用的公钥 我还有一个pdf文件,例如。我的代码在此摘要中复制: 简而言之,有3种方法: ServerSidePrepare(准备哈希,使用公钥) ClientSideSign(通过私钥签名) SaveSignedDocumentOnServer(在服务器上将签名合并为pdf) 但此代码生成pdf文档,该签名无效。当使用方法MakeS
- ServerSidePrepare(准备哈希,使用公钥)
- ClientSideSign(通过私钥签名)
- SaveSignedDocumentOnServer(在服务器上将签名合并为pdf)
如何调试并发现问题?或者可能是pdf客户端签名的其他示例?带有服务器部分,使用c# 您在
GetEncodedPKCS7
调用中使用了错误的摘要
首次构建(正确)使用的已验证属性时
但稍后在实际构建PKCS7签名容器时
result.Sign.GetEncodedPKCS7(result.Hash, result.Now, null, null, null, CryptoStandard.CMS);
这两个调用的参数必须相同(后一个调用中的附加ITSAClient
参数除外)。否则,最终经过身份验证的属性(内置GetEncodedPKCS7
)与原始属性(内置getAuthenticatedAttributeBytes
)不同,需要不同的签名值
因此,您应该在DTO中包含
byte[]messageHash
,并在saveSignedDocumentServer
中使用它。您是否可以共享一个示例结果PDFOf课程:使用客户端签名时文件错误:。使用MakeSignature.SignDistached时文件正确:。太好了!我更新了我的要点,也许对某人有用。
result.Sign.GetEncodedPKCS7(result.Hash, result.Now, null, null, null, CryptoStandard.CMS);