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

时间:2011-10-31 14:52:44

标签: python django cryptography certificate digital-signature

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

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

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

这可以在不需要在用户机器上运行的软件的情况下实现吗?

修改

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

正如tawman在他的回答中所描述的那样,正确的方法是在浏览器中安装客户端模块,并让此模块进行实际签名。您可以签名Java applet或签名ActiveX控件来完成这项工作。

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

Signer.Digital

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

较旧的方法(例如Java applet,Active X等)已被淘汰或正在从新的Modern Browser产品中淘汰。

我来晚了,但是写这篇文章希望答案对仍在寻找浏览器扩展以从USB令牌和MODERN浏览器签名PDF的人很有帮助。

请参阅我在SO Sign PDF with plain JavaScript中的回答,以检查JavaScript和Signer.Digital Browser扩展的用法。

Signer的Java或.NET数字签名组件。可以使用Digital或任何提供程序对浏览器USB令牌中的PDF进行数字签名。

希望这会有所帮助!