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

问题描述 投票:2回答:4

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

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

谢谢

asp.net pdf sign
4个回答
3
投票

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


步骤应该是这样的:

1-客户端将其公共证书发送到已签名的pdf中

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

3-服务器将哈希发送到客户端applet

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

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

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


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

要生成pdf,嵌入证书并准备文档,可以使用itex库,即itext库的c#端口。要计算哈希并创建pkcs7信封,您可以使用.net加密api。

希望这可以帮助。


2
投票

您可能错过了对文档进行数字签名的要点。签署文档的行为是用户活动。

您可以在服务器端创建文档,并使用内容类型“application / pdf”提供该文档,该文档将提供要签名的文档。当他们签名时,您可以使用pdf表单提交将签名文档提交回服务器。


0
投票

如果客户在他们的机器上使用USB smard卡,AspPdf + USB Network GateAnywhereUSB可能会有所帮助。


0
投票

你也可以使用签名服务(对不起,我只知道这个工作)http://www.signagate.de - 这些家伙提供一个Web服务,让你“上传”一个未签名的pdf,将被发送回所谓的'符合欧盟所有签名法律的中间'签名作为合格签名(至少对于我所知的发票)。

有趣的是,你只需要能够对他们的服务进行一次调用,以便将pdf作为答案回复。

因此,“中间”事物允许您(从法律角度来看)不在世界各地推广私钥等,而是在您的PDF上获得有效签名,并通过对该公司的签名服务进行适当的身份验证来保持法律需求。

吉米

© www.soinside.com 2019 - 2024. All rights reserved.