数字签名
在本节中,您将了解签名和验证签名的常规步骤、相关的签名 API、数字签名交互的方式、以及我们提供的测试签名服务路由。
在 PDF 上签名和验证数字签名的步骤
签名文档
- 生成包含签名覆盖范围信息(签名域字典的
byteRange
)的文档文件流。 - 对签名覆盖范围的文件流计算相应的摘要。可通过
PDFUI.registerSignHandler(signerInfo)
或PDFDoc.sign(signInfo,digestSignHandler)
接口实现。 - 使用证书对摘要进行签名来获取
signedData
。 - 将
signedData
写入文件流。signedData
的位置在byteRange
中指定。
验证签名
- 获取文档原始(未修改)文件流、签名覆盖范围信息(签名域字典的
byteRange
)、签名数据和签名者。 - 对签名覆盖范围的文件流计算相应的摘要。可通过
PDFUI.setVerifyHandler(verifyFunction)
或PDFDoc.verifySignature(signatureField, verifyHandler)
接口实现。 - 验证摘要和签名数据,并输出验证结果,包括:
- 文档是否被修改
- 签名者信息是否有效
- 时间戳是否过期等信息
数字签名相关 API
PDFUI.registerSignHandler(signerInfo)
当前,Foxit PDF SDK for Web 支持两种类型的 signature filter:
adbe.pkcs7.detached
(支持的摘要算法:sha1
、sha256
、sha384
)adbe.pkcs7.sha1
(支持的摘要算法:sha1
)
PDFUI.setVerifyHandler(verifyFunction)
用于设置 Verification handler,在验证签名时将调用该 handler。返回 Signature_State
的验证结果状态。
PDFDoc.sign(signInfo,digestSignHandler)
用于对文档进行签名。需要消息摘要和签名函数。
PDFDoc.verifySignature(signatureField, verifyHandler)
用于验证签名。需要回调函数。
PDFSignature
类的主要方法
PDFSignature.isSigned()
- 检查当前签名是否已签名PDFSignature.getByteRange()
- 获取当前签名的文件流中指定范围的字节范围PDFSignature.getFilter()
- 获取当前签名 filterPDFSignature.getSubfilter()
- 获取当前签名的 subfilter
数字签名功能交互
您可以通过 API 或 UI 的方式体验签名工作流。该工作流基于 Node.js 后端,可访问发布包中的 ./server/signature-server-for-win
。
方法1:以编程方式在当前文档上放置签名
- 开启服务器,运行
https://webviewer-demo.foxitsoftware.com/
- 在控制台中运行代码创建签名域并放置数字签名
- 签名后的文档将下载并在 viewer 中重新打开,可点击签名域进行验证
方法2:以 UI 的方式来放置签名
通过在线 viewer https://webviewer-demo.foxitsoftware.com/
体验:
- 点击 Form 选项卡中的 signature 按钮
- 在页面上绘制矩形域
- 点击手型工具或按
Esc
键 - 在弹出框中设置签名信息并确认
验证签名:使用手型工具点击已签名的签名域进行验证
签名 HTTP 服务
测试用 HTTP 服务路由:
http://webviewer-demo.foxitsoftware.com/signature/digest_and_sign
http://webviewer-demo.foxitsoftware.com/signature/verify