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