使用 PAdES 基线签名签署 PDF(已移动)
本示例已移动
标题为“本示例已移动”的章节本页过去收录的签署步骤现已被取代。请改用正式示例:
本页为何变更(勘误)
标题为“本页为何变更(勘误)”的章节本页的较早版本曾说明,高层 Document::setSignature() → save() 调用路径尚未接通,且会抛出 NotImplementedException。**这已不再成立。**这条高层调用路径现在会生成真正的签名。
Document::setSignature($cert, SignatureLevel::PAdES_B_B)->save()(以及等效的 output() / getPdfData())会写入一个 /Sig 字段,内含一个 /ByteRange,以及一个放在签名字典 Contents 条目中的 DER 编码 CMS SignedData 对象——这正是 ISO 32000-2 §12.8 为 ETSI.CAdES.detached SubFilter 所规定的结构。生成结果可由 CMS 验证:标准 CMS/PKCS#7 验证器可以解析并校验它。
- B-B——即核心级别——可以直接通过这条调用路径生成。
- B-T 只需在同一次调用中传入一个
TsaClient,即可加上一个 RFC 3161 signature-time-stamp。 - B-LT / B-LTA 同样可以通过同一条高层调用路径完成(
setSignature($cert, SignatureLevel::PAdES_B_LTA, $tsaClient)->save()),但前提是已安装 Pro 与 Enterprise 包;若未安装,此次调用会以 fail-closed 方式拒绝执行,不会写出不完整的长期版本。对于加密过的文档,B-LT/B-LTA 同样会 fail-closed。
较低层的 NextPDF\Security\Signature\DigitalSigner 路径仍受支持,也是下方正式示例从头到尾演示的做法;高层调用路径只是同一套签署引擎之上的轻量封装。集成测试套件会覆盖两种路径,并生成真实且可解析的 CMS 对象。
U-1 注意事项(声明范围)。“可由 CMS 验证”是指生成的对象是格式正确的 CMS
SignedData,并符合 RFC 5652 与 ISO 32000-2 §12.8—— 它并非对 ETSI EN 319 142-1 基线配置文件符合性的断言, 也不是对法律效力的断言。该标准中有关基线级别的内容并不在验证语料库之内;B-T 的signature-time-stamp要求是针对 ETSI EN 319 122-1 §5.3,搭配 RFC 3161、RFC 5652、RFC 5816 与 ISO 32000-2 §12.8 进行核查。B-LT/B-LTA 会生成长期验证的结构(一个 DSS 字典加一个 DocTimeStamp 版本);但它们并未被标榜为已通过配置文件符合性测试。符合性与法律效力的判定,应交由独立的验证程序认定。
哪些内容保持不变
标题为“哪些内容保持不变”的章节旧页关于磁盘上实际输出文件的结构性陈述仍然正确。替代示例会连同佐证一并重述这些事实:
- 签名值存储在签名字典的
Contents条目中(ISO 32000-2 §12.8.1)。 - 摘要值针对
ByteRange计算,并排除签名值本身(ISO 32000-2 §12.8.1)。
本页并未断言任何由此生成的签名具有法律效力。这取决于证书、证书的信任锚点以及验证方策略;这些都不在本库范围内。