首页 > web前端 > js教程 > JavaScript 和 WebCrypto API 可以单独签署 PDF 吗?

JavaScript 和 WebCrypto API 可以单独签署 PDF 吗?

Mary-Kate Olsen
发布: 2024-12-01 03:31:09
原创
537 人浏览过

Can JavaScript and WebCrypto API Alone Sign a PDF?

使用 JavaScript 和 WebCrypto API 签署 PDF

WebCrypto API 的发展及其在 Chrome 和 Firefox 等主要浏览器中的支持增加了可能性利用它进行数字 PDF 签名。然而,缺乏文档和详细示例带来了挑战。虽然有解释签名过程的示例,但期望的结果 - 签名的 Base64 PDF 字符串 - 仍然难以捉摸。

我们可以单独使用 JavaScript 和 WebCrypto API 对 PDF 进行签名吗?

目前,WebCrypto API 无法访问密钥存储或外部加密设备。为了满足常见的 PDF 签名要求(其中 PDF 应在服务器边界内受到保护),不鼓励将整个文档发送到浏览器或签名 API 服务器。

最佳方法

有效的解决方案包括创建 PDF 的哈希值以进行签名,将该哈希值发送到浏览器,并通过浏览器扩展利用 JavaScript 访问本地密钥库(或 USB/智能卡)以生成签名。生成的签名(例如 PKCS7 或 CMS 容器)可以发送回服务器,在服务器中可以将其注入到创建哈希的原始 PDF 中。

Signer.Digital Extension for Browser扩展

为了促进基于浏览器的签名方案,可以使用名为 Signer.Digital 的浏览器扩展和随附的 .NET 库。该扩展程序可与主要浏览器(Chrome 和 Firefox)无缝协作,利用 Signer.Digital Browser Host 与 Windows 证书存储和底层 CSP 交互以签署哈希值。

JavaScript 代码示例

要从扩展调用签名功能,可以使用 JavaScript 代码如下:

// Calculate Sign for the Hash by Calling function from Extension SignerDigital
SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256")  // or "SHA256"
  // SignerDigitial.signHashCAdESBr method may be used for producing ICP-Brazil Signature

  .then(
    function (signDataResp) {
      // Send signDataResp to Server
    },
    function (errmsg) {
      // Send errmsg to server or display the result in browser.
    }
  );
登录后复制

图:从浏览器进行数字签名

[从浏览器进行数字签名的图像]

  1. 服务器发送以下哈希值将文档发送到浏览器。
  2. 浏览器使用 Signer.Digital 浏览器扩展 JavaScript API 来调用来自扩展主机的操作。
  3. 浏览器扩展主机与证书存储或加密设备交互以获取签名哈希。
  4. 签名由扩展主机返回到浏览器。
  5. 浏览器将签名发送回服务器,然后服务器可以将其合并到 PDF 中。

以上是JavaScript 和 WebCrypto API 可以单独签署 PDF 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板