使用具有日期和时间的数字签名生成并签名PDF

时间:2018-11-30 15:01:44

标签: asp.net-mvc pdf digital-signature

我不熟悉在PDF文档中添加数字签名。因此,如果我的某些术语和假设有误,请随时纠正我。我只是最近才开始阅读此书,因此需要尽快起步。

我刚刚开始一个新项目(在MS MVC / asp.net中),我需要生成一份法律文件,然后贴上我的持股人所说的“数字签名”,但根据他们的描述,我认为这是只是将签名的可见图片添加到PDF并保存在某处。我不认为这具有应有的法律效力。现在可能没什么关系,因为正式记录将是该文件的打印输出。但是我们希望转向数字存储,因此我需要一些可行的方法。

我对实际数字签名的理解是对文档进行加密,然后将数字签名添加到加密的哈希中。但是,此数字签名在文档上不可见,除非也添加了此类图像来表示它。这是正确的吗?

有人可以为此建议一个很好的教程吗?我需要能够添加官方数字签名以及可见签名。

4 个答案:

答案 0 :(得分:0)

Halter,您要做的就是将称为PAdES签名的内容应用于PDF文档。为此,您需要一个熟悉PAdES和PDF的库。

要执行此操作,您将需要一个支持这些标准的库,当然可以自行生成,但是会花费很多时间。与C#支持一起使用的最常见的PDF库可能是iText

还有一个nuget package that is LGPLed

数字签名中发生的不是完全加密。在这种情况下,“数字签名”表示您已在某个时候注册了X.509证书,该证书将名称绑定到私钥。本质上,它说“此密钥名称的持有者是弗雷德”。

然后,您对文档(文档的完整部分)进行哈希处理,并使用证书私钥对该哈希进行加密。加密的哈希是文档上的“签名”。然后将其嵌入称为CMS的结构中,该CMS还获得与签名相关联的证书的副本,并包含其他一些元数据(例如CRL,OCSP等)。

iText将为您处理大部分操作,并且他们有一个示例来准确描述该操作。

您将需要从某个地方获取证书,最简单的开始可能是注册free S/MIME certificate from sectgo.com,此证书不会被Adobe Acrobat信任(使用数字签名时最常用的PDF查看器) ),但除了满足您的需求外,无需学习更多关于证书的知识。

投产时,您将需要获得所谓的AATL证书,您可以从GlobalSignDigiCert {p>

答案 1 :(得分:0)

Mki,根据您在Terry的个人资料和名字在美国对AATL证书的评论,因此不会从eIDAS立法机关中获得任何好处,即使他不是最具有杂技演员可比性的人,他也希望也是ATL的合格证书。此外,GobalSign和DigiCert都宣布了合格证书的可用性,或者宣布收购了提供它们的CA,因此,如果他需要它们,则可以获取它们。从AATL或合格的证书开始将需要一定的成本,并且涉及销售工作,这将使您无法正常使用解决方案。

答案 2 :(得分:0)

简短回答。您的假设基本上是正确的。数字签名通常不可见且不可打印。
但是,至少使用Adobe Acrobat时,您可以选择是否以及要显示为“签名”的图像。默认值是一个字段,其中包含签署人的姓名,日期和其他内容,但是,如果您确实需要,可以插入模拟签名的图片。仅在确实需要打印文档时使用。

还有一个有关在安全堆栈上签名文件的问题:https://security.stackexchange.com/questions/198423/what-does-signing-a-file-really-mean

答案 3 :(得分:0)

签名的外观不是强制性的,而是可以在PDF文档中设置的,因此,即使从打印输出中打印文档,也可以很明显地看到文档的软拷贝已经过数字签名。可以根据需要将“打印的签名”外观框和在“签名框”中渲染的所需文本一起放置在文档(页面)上。签名者名称,位置,日期,签名原因等。AcrobatReader 8还会如下所示显示签名验证标记: PDF Signature Validation Mark

如果要从MVC / ASP.NET应用程序中执行此操作,则可能必须使用浏览器扩展通过客户端的浏览器从用户(客户端)的证书存储区或USB令牌或智能卡中读取签名,以在服务器上签名文档,而不将完整的文档传输给客户端。请参考此SO answer,该指南将带您进入教程和示例工作源代码下载,代码逻辑说明等。