我有一个使用 ASP.NET (C#) 在服务器上生成 PDF 的项目。但现在我们需要客户能够对这些 PDF 进行数字签名。据我所见,必须在客户端使用小程序对文档进行签名,因为在服务器中我无法访问证书的私钥,但正如我上面所说,PDF 是在服务器上生成的,我把它们留在那里。
所以,我需要的是在服务器上对 PDF 进行数字签名,获取客户的证书。
谢谢
由于提取和发送客户端的私钥是不可能或无论如何都不安全的,因此要在服务器上签署 pdf,您需要与客户端建立“会话”并让他们计算签名。
步骤应该是这样的:
客户发送他的公共证书以嵌入到签名的 pdf 中
服务器生成pdf,嵌入证书并计算哈希(例如:sha1)
服务器将哈希发送到客户端小程序
小程序用她的私钥计算数字签名
小程序将签名发送到服务器
服务器嵌入数字签名并关闭 pdf。
要使用 itext 执行此操作,您必须在嵌入证书后使用 preclose 方法,以便能够计算最终文档的 sha1 哈希值。然后在预先关闭 pdf 后,您必须计算 pdf 的哈希并将其发送给客户端。注意:在预先关闭时,您必须将文档保存在内存中,例如在服务器会话中。
要生成 pdf,嵌入证书并准备文档,您可以使用 itextsharp,itext 库的 c# 端口。要计算哈希并创建 pkcs7 信封,您可以使用 .net crypto api。
希望这可以帮助。
您可能错过了对文档进行数字签名的要点。签署文件的行为是一种用户活动。
您可以在服务器端创建文档并使用内容类型“application/pdf”提供它,这将提供要签名的文档。当他们签名时,您可以使用 pdf 表单提交将签名的文档提交回服务器。
如果客户端在他们的机器上使用 USB 智能卡,AspPdf + USB Network Gate或AnywhereUSB可能会有所帮助。
您还可以使用签名服务,例如(对不起,我只知道这个可以工作)http://www.signagate.de - 这些人提供了一种 Web 服务,使您能够“上传”未签名的 pdf,它将被送回所谓的“中间”签名,该签名甚至符合欧盟的所有签名法作为合格签名(至少对于我所知的发票)。
有趣的是,您只需要能够给他们的服务打个电话就可以得到 pdf 作为答案。
因此,“中间”事物允许您(从法律角度)不在世界范围内推广私钥等,而是在您的 PDF 上获得有效签名,并通过对该公司的签名服务进行适当的身份验证来保持法律需求.
吉米