这是我想要做的:
所以现在我面临的问题是如何在步骤3中执行此操作(是)。如果签名在服务器上没有问题,我有一些html-> php-> pdf类可以使用数字签名进行签名但签名必须作为文件在服务器上。问题是,我怎样才能直接在服务器上进行。用户选择是,读取签名(从他的计算机上的读者)并发送到服务器并完成签名。在这里,我相信如果没有像Java这样的东西,我就无法做到。在我看来,PHP和JavaScript肯定对于这个动作来说还不够。
有没有人遇到过类似的问题?也许一些准备使用的库?
P.S。不太确定标签是否正确,但无法确定要放置哪个。
答案 0 :(得分:6)
如果带有私钥的证书在客户端上,那么您需要一个客户端模块来进行签名。 JavaScript是不够的,因为它无法访问客户端上的密钥。虽然您可以尝试调用CAPICOM from JavaScript,但这是部分(没有PKCS#11支持),Windows特定和过时的解决方案。更好的选择是使用Java编写的浏览器小程序将执行签名(见下文)。
我们的SecureBlackbox产品有一个分布式签名附加组件,它完全符合您的描述(目前支持PHP,Java,ASP.NET和编译模块)。您可以看到该方案加载项的工作原理:
在我们的产品中,我们提供预构建的浏览器模块 - Java Applet,ActiveX控件和Flash applet,但Java applet在大多数情况下都足够,因为它可以访问Windows上的PKCS#11存储和Windows证书存储。对于不支持Java applet的浏览器,SecureBlackbox允许通过Java Web Start使用applet作为外部“应用程序”。
您可能需要重新创建这个完整的方案,但是计算服务器上的哈希并将其传递给客户端进行签名然后将签名重新嵌入文档是一个很大的技巧。
将完整的文档传输到客户端并使用我的SecureBlackbox的iText或Java版本签署该文档的Java小程序可能会更容易,然后将文档上传回服务器。
答案 1 :(得分:0)
@Eugene Mayevski的流程图'Allied Bits很好地表示了浏览器的签名过程,较旧的方法是Java applet,Active X等,它们已被淘汰或正在从新的Modern Browser产品中淘汰。
https://www.java.com/en/download/faq/chrome.xml
用于网络浏览器的Java插件依赖于跨平台插件体系结构NPAPI,该框架已被所有主流网络浏览器支持了十多年。 Google的Chrome版本45及更高版本已不再支持NPAPI,因此Java Plugin不再适用于这些浏览器。
我来晚了,但是写这篇文章希望答案对仍在寻找浏览器扩展以从USB令牌和MODERN浏览器签名PDF的人很有帮助。
请参考我在this stackoverflow post中的回答,以检查JavaScript和Signer.Digital Browser扩展的用法。
Signer.Digital或任何提供程序的Java或.NET数字签名组件可用于从浏览器USB令牌对PDF进行数字签名。
对于PHP,可以通过Apache代理通过在Tomcat上运行的JavaBridge使用Java组件对服务器端的浏览器USB令牌和PHP进行PDF数字签名。
希望这会有所帮助!