使用CA发布的数字证书签署PDF文档的Web应用程序

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

想象一下用python / django编写的web应用程序,其中用户通过apache + mod_ssl(以及自定义django身份验证后端)使用数字证书进行身份验证,那么他们如何签署文件呢?证书由政府批准的CA发布。

如果我没有错,则需要使用证书的私钥对文件进行签名,因为这证明该文件已经由某人(而不是假装成某人的其他人)签名。

Web应用程序如何访问存储在用户浏览器中的证书的私钥?

这可能不需要在用户的机器上运行软件吗?

编辑:

所以这可以通过ActiveX控件或Java小程序来完成,对吧?这需要从头开发还是有人知道开源解决方案?

python django cryptography certificate digital-signature
4个回答
2
投票

您是正确的,因为Web应用程序需要访问用户本地计算机或PKI存储上的私钥。我为USAF网络上的Web应用程序开发了这样的解决方案。

用户使用包含PKI凭据和私钥的CAC Card登录到USAF计算机。在我们的解决方案中,我们需要对我们的Web应用程序生成的PDF文档进行数字签名。我们构建了一个ActiveX控件,可以通过Web服务从Web站点下载PDF文档,在本地对PDF进行数字签名,然后将签名的PDF文档发送回网站。

由于这些文档的签名权限是如此有限的受众,我们能够获得使用ActiveX控件的授权。您正朝着正确的道路前进,因为只有本地授权的应用程序才能访问用户的密钥库。


0
投票

正如tawman在他的回答中所描述的那样,正确的方法是在浏览器中安装客户端模块,并让此模块进行实际签名。您可以使用已签名的Java小程序或已签名的ActiveX控件来完成此任务。

我们为即用型客户端模块提供分布式签名的解决方案,但服务器端部分需要.NET或VCL(没有python,抱歉)。我们的解决方案不需要将文档传输到客户端(与tawman的方案不同) - 只有少量数据被发送到客户端并在那里签名。

附注:用于通过SSL进行身份验证的客户端证书很可能不适用于签名:这两个操作在证书中需要不同的密钥用法扩展。


0
投票

这听起来像欧盟的东西。不幸的是,有无数不同的现有在线签名插件。请记住,许多人也依赖于客户端软件(如果证书来自智能卡,通常也需要存在智能卡中间件)。所以你最好研究你的目标市场。


0
投票

今天更优雅的方法是使用浏览器扩展

一个这样的免费浏览器扩展是Signer.Digital

较旧的方法是java applet,Active X等,这些方法已逐步淘汰或正在逐步淘汰新的Modern Browser产品。

我有点迟了,但写这篇文章希望答案对于那些仍在寻找浏览器扩展以从USB令牌和现代浏览器签名PDF的人有所帮助。

请参阅我的帖子Sign PDF with plain JavaScript中的答案来检查JavaScript和Signer.Digital Browser扩展用法。

Signer.Digital或任何提供商提供的Java或.NET数字签名组件可用于从浏览器USB令牌对PDF进行数字签名。

希望这可以帮助!

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