如果带有私钥的证书在客户端上,则您需要一个客户端模块进行签名。JavaScript不够用,因为它无法访问客户端上的密钥。尽管您可以尝试从JavaScript调用CAPICOM,但这是Windows特定的过时的部分解决方案(不支持PKCS#11)。更好的选择是使用Java编写的浏览器小程序将执行签名(请参见下文)。
我们的SecureBlackbox产品具有一个分布式签名附加组件,可以完全满足您的描述(目前支持PHP,Java,ASP.NET和编译模块)。您可以看到该方案的工作原理:
在我们的产品中,我们提供了预构建的浏览器模块-Java Applet,ActiveX控件和Flash applet,但是Java applet在大多数情况下已足够,因为它可以访问Windows上的PKCS#11存储和Windows证书存储。对于不支持Java小程序的浏览器,SecureBlackbox允许通过Java Web Start将小程序用作外部“应用程序”。
您可能需要重新创建此完整的方案,但是,计算服务器上的哈希并将其传递给客户端进行签名,然后将签名嵌入到文档中是一个很大的技巧。
将完整的文档传输到客户端并使用Java小程序将使用iText或我们的SecureBlackbox的Java版本对该文档进行签名,然后将其上传回服务器,可能会更容易。