Javascript PDF在线数字签名
我们正在建立一个Java网站,与用户共享文档 一旦用户访问了他的文档,他就可以用他的证书对文档进行数字签名(证书存储在客户端) 要求为在线标志,文件列表上有“标志按钮” 我们研究了实现该需求的方法,但显然,如果不使用JavaApplet或包含用户证书的安全服务器,就无法做到这一点 我们知道在独立的Java应用程序上会使用什么其他解决方案,但这不是一个在线解决方案 问题是: 是否有一种方法可以在不使用小程序的情况下访问用户的密钥存储或在签名过程中从文件系统加载证书Javascript PDF在线数字签名,javascript,java,web-applications,digital-signature,Javascript,Java,Web Applications,Digital Signature,我们正在建立一个Java网站,与用户共享文档 一旦用户访问了他的文档,他就可以用他的证书对文档进行数字签名(证书存储在客户端) 要求为在线标志,文件列表上有“标志按钮” 我们研究了实现该需求的方法,但显然,如果不使用JavaApplet或包含用户证书的安全服务器,就无法做到这一点 我们知道在独立的Java应用程序上会使用什么其他解决方案,但这不是一个在线解决方案 问题是: 是否有一种方法可以在不使用小程序的情况下访问用户的密钥存储或在签名过程中从文件系统加载证书 感谢和问候。由于安全限制,无法使
感谢和问候。由于安全限制,无法使用javascript使用安装在系统/浏览器密钥库上的证书 另一种解决方案是在客户机上安装一个带有嵌入式web服务器的应用程序,并从当前要签名的网页发送文档。此应用程序可以使用密钥库并包含itext库
如果用户有一个证书文件(
.p12
/.pfx
),则可以使用WebCryptographyApi加载内容并在客户端对文档进行签名(无需将证书上载到服务器。请参阅@pedrofb is right,没有插件的帮助,您将无法访问主机上的证书存储
您可以在浏览器中使用WebCrypto和PKIjs之类的库将密钥加载到浏览器中并进行签名,如果您愿意,还可以验证PDF签名。以下是一些相关示例:
您可以在浏览器中查看讨论和提供智能卡访问权限的插件。现代浏览器不支持小程序。对于基于浏览器的签名方案,我的公司已发布免费的Chrome extension Signer。可以使用链接从cNet下载Digital和setup 安装此主机并重新启动Chrome将自动添加 从扩展名调用方法的Javascript:
//Calculate Sign for the Hash by Calling function from Extension SignerDigital
SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256") //or "SHA256"
.then(
function (signDataResp) {
//Send signDataResp to Server
},
function (errmsg) {
//Send errmsg to server or display the result in browser.
}
);
如果失败,则返回以“SDHost error:”开头的错误消息:
如果成功,返回Base64编码的pkcs7签名-如您所说,使用iText或任何合适的库将签名注入pdf
披露:我为CISPL(Signer.Digital)工作。大写标题您提到的产品是您自己的产品。是的。但它是免费的,与完整的C#工作源代码项目一起在VS 2015或VS 2017中工作。如果您谈论自己的产品,您需要披露源代码和JavaScript。