在服务器上对 PDF 进行数字签名

Her*_*nan 5 pdf asp.net sign

我有一个使用 ASP.NET (C#) 在服务器上生成 PDF 的项目。但是现在我们需要客户能够对这些 PDF 进行数字签名。从我所见,必须在客户端使用小程序对文档进行签名,因为在服务器中我无法访问证书的私钥,但正如我上面所说,PDF 是在服务器上生成的,我把它们留在那里。

所以,我需要的是在服务器上对 PDF 进行数字签名,并使用客户端的证书。

谢谢

小智 3

由于提取和发送客户端的私钥是不可能或安全的,因此要在服务器上签署 pdf,您需要与客户端建立“会话”并让他们计算签名。


步骤应该是这样的:

  1. 客户发送他的公共证书以嵌入签名的 pdf 中

  2. 服务器生成pdf,嵌入证书并计算哈希值(例如:sha1)

  3. 服务器将哈希值发送到客户端小程序

  4. 小程序用她的私钥计算数字签名

  5. 小程序将签名发送到服务器

  6. 服务器嵌入数字签名并关闭 pdf。


要使用 itext 执行此操作,您必须在嵌入证书后使用 preclose 方法,以便能够计算最终文档的 sha1 哈希值。然后在预关闭 pdf 后,您必须计算 pdf 的哈希值并将其发送给客户端。请注意:在预先关闭时,您必须将文档保存在内存中,例如在服务器会话中。

要生成 pdf、嵌入证书并准备文档,您可以使用 itextsharp(itext 库的 C# 端口)。要计算哈希值并创建 pkcs7 信封,您可以使用 .net crypto api。

希望这可以帮助。