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