数字签名与PHP


Digital Signatures with PHP

是否可以让用户对文档进行电子签名?

  1. 我为我的网站上的用户上传文件,以审查和签署
  2. 用户登录,查看文档,然后以某种方式对其进行数字签名。(不是他们签名的图片)
  3. 我收到一份文件,以某种方式验证他们合法签署了。

我希望用户不需要下载,用一些第三方工具签名,然后上传文档。我想让他们在网页上执行这个动作比如登录时在文档的方框里输入全名

一种可行的方法是为每个用户生成一对加密密钥。两个密钥(私钥和公钥)都需要保存在服务器上,私钥受到密码保护。理想情况下,只有用户自己知道密码(在生成密钥时询问密码,但不保存密码),没有其他人知道。然后,在用户通过输入他的私钥密码签署了文档之后,您将能够使用他的公钥验证他的"签名"。

这个过程本身很大程度上取决于你的服务器设置(即访问加密工具,数据库等)。

PS:我怀疑这是否具有法律约束力(至少不是我所在的地方),但您的管辖范围可能会有所不同。

"某种验证他们合法签名的方式" ..根据国家的不同,其含义略有不同(您的个人资料不会显示您的位置)。关于法律部分,我只能代表美国回答。至于技术方面……

您可以使用PHP将PDF的每个页面导出为PNG,然后将每个页面(作为PNG图像)呈现给用户查看。然后使用JavaScript在指定位置记录用户的签名动作。然后,用户发布他/她对签名的接受并记录下来。当每个用户都"签名"后,您就可以使文档可供下载。当第一个用户想要下载带有所有签名的PDF时,你可以简单地申请一个签名证书来验证你(你的应用程序/公司)证明文件和签名的真实性,就像"公证人"对文件进行公证一样。您必须能够提供一种方法,将文档链接到签名的签名日志(当您记录用户签名的操作时)和身份验证日志(当您对用户进行身份验证时)。我使用包装在Java SOAP服务中的iText来操作PDF,然后让PHP调用该服务。我已经创建了一个这样做的应用程序,但到目前为止,它仍处于alpha阶段,否则我会链接它。

dotloop有一个类似于上面的简单方法,减去真正的身份验证,显然他们的系统成功地用于成千上万的房地产交易(托管公司将验证交易的所有各方)

注意:应用程序登录,甚至OAuth不像欧洲智能卡那样可靠,但即使是这些也不是万无一失的。也许一个更好的身份验证解决方案是让用户上传他们的ID副本(AirBnB就是这么做的)。另一个解决方案可能是集成一个简单的flash应用程序,记录签名者发表声明,表示他们接受该交易的签名,并将其链接到文档和签名。

要记住的关键事情是:(1)你可以处理web应用程序堆栈中的所有内容(HTML;JavaScript;PHP;ittext),因此用户永远不必下载实际的PDF。(2)在很多情况下,只要你能认证为文件做签名动作的用户,只需要在最终文件上"证明"用户做了签名并提供证明(就像dotloop所做的那样),而不是认证每个签名。我说的认证是指你用AATL证书签署最终的PDF。