Enterprise 版本
归档:DSS、VRI、LTV 健康检查、文档时间戳
NextPDF Enterprise 让长期签名随时间保持有效。它会写入文档安全存储(DSS)与按签名维度的 VRI,用 LTV 健康检查检视归档完整性,并在时间戳证书过期之前重新加盖文档时间戳。本页为行为层面。它说明归档接口做了什么、检视了什么,以及验证者仍需自行决定什么。
可用性与授权
标题为“可用性与授权”的章节此能力随 NextPDF Enterprise(nextpdf/enterprise)发布,并通过一个 Enterprise 层级的授权封套激活。没有该授权的部署不会加载此能力的类。对比各版本并获取授权。
DSS、VRI、LTV 健康检查与归档循环接口仅限 Enterprise。NextPDF Core 生产 B-B 与 B-T 基准级别(Core 自带 RFC 3161 时间戳路径,因此 B-T 不需要高级版包)。NextPDF Pro 生产 B-B 与 B-T 基准级别,但不生产 DSS 或文档时间戳。B-LT 与 B-LTA 级别仅由 Enterprise 生产,这与 Pro 安全页面上已发布的层级表一致。在仅 Pro 的部署中,请求长期级别会失败关闭,并附带一条指明缺失 Enterprise 组件的消息。
| PAdES 级别 | 增加 | 生产者版本 |
|---|---|---|
| B-B | 带签名属性的 CMS 签名 | Core、Pro、Enterprise |
| B-T | 在签名值上加盖受信任的 RFC 3161 时间戳 | Core、Pro、Enterprise |
| B-LT | 含验证素材的文档安全存储 | 仅 Enterprise(nextpdf/enterprise) |
| B-LTA | 用于归档有效性的文档时间戳(归档循环) | 仅 Enterprise(nextpdf/enterprise) |
这是权威的“级别→层级”矩阵:B-B 是每个版本都生产的基准;B-T(带时间戳)由 Core、Pro 与 Enterprise 生产;B-LT 与 B-LTA 仅限 Enterprise。
composer require nextpdf/enterprisenextpdf/enterprise 依赖 nextpdf/core 与 nextpdf/pro。归档接口属于 Enterprise 版本。
概念总览
标题为“概念总览”的章节长期验证依托两个结构:DSS 与文档时间戳字典——ISO 32000-2 §12.8。DSS 保存在证书过期之后验证签名所需的证书、OCSP 响应与 CRL——ISO 32000-2 §12.8.4.3。VRI 是指向那些素材的按签名维度索引,以签名的内容哈希为键。文档时间戳字典把整个文档状态锚定在时间上——ISO 32000-2 §12.8.5。ETSI EN 319 142-2 描述了同样的长期形态——§5.5——以及处理器对它的支持——§6.3.3.3。
时间戳证书有有限的生命周期。在它过期之前,归档循环会为时间戳证书链收集新鲜的吊销素材、重写 DSS,并在更新后的状态之上添加一个新的文档时间戳。每个新时间戳都覆盖之前的时间戳,因此只要该循环按排程运行,信任链就能无限延展。该时间戳是一次 RFC 3161 交换——§2.4.1——带有一个 UTC genTime(§2.4.2)。
LTV 健康检查会检视一份既有文档的归档完整性:DSS 是否存在、是否内嵌了 OCSP 响应或 CRL、证书存储与按签名维度的 VRI 是否存在。它检查的是结构性是否存在;它不会重新验证内嵌 OCSP 或 CRL 数据的密码学有效性。吊销素材有新鲜度窗口:OCSP 响应报告 good、revoked 或 unknown——RFC 6960 §2.2——并受 thisUpdate/nextUpdate 限定——RFC 6960 §4.2。
已归档的签名是否通过验证,仍然是验证者依据其信任锚与新鲜度策略所作的决定。归档接口让素材保持完整并锚定在时间上;它并不断言一个受信任的结果。
它为何这样设计
标题为“它为何这样设计”的章节归档接口只能通过 Core 契约——LtvManagerInterface 与 SignatureLevel 枚举——来触达,从不经由具体的 Enterprise 类。那道边界是承重的。调用代码从 Core 到 Enterprise 保持完全一致,因此升级只是增加能力,而无需重写。该枚举会依据已安装的环境解析所请求的级别。缺少 Enterprise 生产者的长期请求会失败关闭,而不会静默降级为一个未归档的签名。这一点很重要,因为一个看似长期、却不携带 DSS 或文档时间戳的签名,会在数年之后、在无人留意之时验证失败。
设计背景:长期验证。
API 接口
标题为“API 接口”的章节归档接口通过 Core 长期契约与 Enterprise 合规策略接口来使用。生产代码依赖的是契约。
| 类型 | 种类 | 角色 | 稳定性 | 起始版本 |
|---|---|---|---|---|
LtvManagerInterface | interface (NextPDF\Contracts) | 长期验证生产者与归档循环契约 | stable | 1.0.0 |
TsaClientInterface | interface | 归档循环所使用的 RFC 3161 TSA 客户端 | stable | 1.0.0 |
SignatureLevel | enum (NextPDF\Security\Signature) | PAdES 级别:B-LTA 是归档级别 | stable | 1.0.0 |
LTV 健康检查作为一项 Enterprise 合规策略运行。它会发出结构化的检查结果——结构存在时为信息性、归档结构缺失时为警告或错误——每一项都带有 ISO 32000-2 §12.8.4.3 引用。具体的归档类是内部的,不属于公开 API 的一部分。
代码示例 — 快速开始
标题为“代码示例 — 快速开始”的章节<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Security\Signature\SignatureLevel;
/** * B-LTA is the archival level: DSS plus a document timestamp, * maintained by the archival loop. Requires nextpdf/enterprise. * * @return bool True when this level needs a document timestamp. */function isArchivalLevel(SignatureLevel $level): bool{ return $level->requiresDocumentTimestamp();}代码示例 — 生产
标题为“代码示例 — 生产”的章节<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Contracts\LtvManagerInterface;use NextPDF\Exception\NextPdfException;use Psr\Log\LoggerInterface;
final readonly class ArchivalMaintenance{ public function __construct( private LtvManagerInterface $ltv, private LoggerInterface $logger, ) {}
/** * Run the archival loop before the timestamp certificate expires. * * The loop collects fresh revocation material for the timestamp * certificate chain, rewrites the DSS, and adds a new document * timestamp over the updated state. * * @throws NextPdfException When no TSA is configured, or under a * strict-offline network policy. */ public function maintain(): void { try { // The orchestrator drives DSS rewrite + document timestamp via // the resolved LtvManagerInterface. Schedule this before the // timestamp certificate's notAfter. $this->logger->info('archival loop completed'); } catch (NextPdfException $e) { $this->logger->error('archival loop failed', ['reason' => $e->getMessage()]); throw $e; } }}请把归档循环排程在时间戳证书过期之前运行。在过期之后才运行的循环,无法延展信任链。
边界情况与注意事项
标题为“边界情况与注意事项”的章节- 该循环是一个排程,而非一次性操作。 只有在每个时间戳证书过期之前该循环都持续运行时,B-LTA 有效性才是无限期的。请把它当作一项运维义务对待。
- 健康检查是结构性的。 LTV 健康检查报告 DSS、OCSP/CRL、证书存储与 VRI 是否存在。它不会以密码学方式重新验证内嵌的吊销数据;一个存在但已过期的 OCSP 响应仍会被报告为存在。
- VRI 缺失是警告,而非错误。 没有 VRI 的 DSS 是有效的;健康检查将其标记为警告,因为某些验证器在有 VRI 时能更好地展示按签名维度的状态。
- 严格离线会阻断该循环。 归档循环需要新鲜的 TSA 令牌与新鲜的吊销素材;在严格离线网络策略下它会抛出一个错误。
- 没有 TSA 就没有归档循环。 与 B-LTA 本身一样,在未配置 TSA 客户端时,该循环会抛出一个错误。
一次健康检查是对文档的结构性扫描,开销很小。一次归档循环迭代的成本是一次 TSA 往返,外加为时间戳证书链所做的 OCSP/CRL 抓取;预先收集好的素材会省去抓取往返。1500 毫秒的墙钟预算在连接预热的情况下涵盖一次循环迭代。复现性配置为 structural:每个文档时间戳都内嵌其 genTime,因此重新加盖的运行在那些字节上有所不同,而结构是相同的。
安全说明
标题为“安全说明”的章节- 有效性是验证者的决定。 归档接口让素材保持完整并锚定在时间上。验证者是否接受它,取决于其信任锚与吊销新鲜度策略。
- 新鲜度有一个时钟。 内嵌的 OCSP/CRL 素材受其更新字段限定。是归档循环让信任链在数年间始终保持在一个可信窗口之内。
- 结构性健康不等于密码学验证。 一次通过的 LTV 健康检查意味着这些结构存在,而不意味着每个内嵌响应当前都是可信的。
- 参见 签名:PAdES B-LT / B-LTA 以及威胁模型一节。
数据驻留与个人信息缓解
标题为“数据驻留与个人信息缓解”的章节归档循环会联系 OCSP/CRL 响应方与 TSA。在受驻留约束的部署中,请预先收集吊销素材,并在无需循环的场景使用严格离线策略,或者把 TSA 与响应方放在区域内。DSS 内嵌的证书携带主体身份;归档接口添加的是验证所需的素材,并不会引入超出它所处理的证书链之外的身份信息。
安全遥测与日志清洗
标题为“安全遥测与日志清洗”的章节健康检查的结果会指明缺失的结构与 ISO 条款,而非文档内容。归档循环诊断报告循环结果与素材缺失状况。两者都不会记录私钥或完整的证书内容。当响应方与 TSA 的 URL 会暴露内部基础设施时,请从日志中清洗掉它们。
FIPS 模式行为
标题为“FIPS 模式行为”的章节FIPS 140-3 密码学策略配置文件是一项 Enterprise 能力,随安全模块一同记录。归档接口只增加用于文档时间戳的 SHA-256 摘要与 RFC 3161 交换;它不引入任何其他原语。在 FIPS 配置文件下,会生成相同的 DSS、VRI 与文档时间戳结构;该约束适用于摘要与签名算法,而不适用于归档布局。
威胁模型
标题为“威胁模型”的章节| 资产 | 对手 | 风险 | 缓解 |
|---|---|---|---|
| 时间戳链连续性 | 错过循环排程 | 时间戳证书过期后信任链中断 | 在每个时间戳证书过期之前运行归档循环 |
| 内嵌的吊销素材 | 接受已过期素材 | 验证者信任已过期的 OCSP/CRL 数据 | 新鲜度窗口限定有效性;该循环在过期前重新收集 |
| LTV 健康信号 | 对结构性通过过度信任 | 一份看似完整但数据已过期的归档 | 健康检查声明它是结构性的,而非密码学再验证 |
| 文档时间戳 | TSA 不可达或被攻陷 | 没有新的时间锚 | 由调用方选择 TSA;未配置 TSA 时循环失败关闭 |
符合性
标题为“符合性”的章节| 主张 | 标准 | 条款 |
|---|---|---|
| 长期验证使用 DSS 与文档时间戳字典。 | ISO 32000-2 | §12.8 |
| DSS 保存证书、OCSP 响应与 CRL;VRI 按签名维度组织。 | ISO 32000-2 | §12.8.4.3 |
| 文档时间戳使用文档时间戳字典。 | ISO 32000-2 | §12.8.5 |
| DSS 条目与文档时间戳支持长期签名。 | ETSI EN 319 142-2 | §5.5 |
| 签名处理器支持 DSS 条目与文档时间戳。 | ETSI EN 319 142-2 | §6.3.3.3 |
| 时间戳令牌携带一个 UTC genTime,即它被创建的那一瞬间。 | RFC 3161 | §2.4.2 |
| OCSP 报告 good、revoked 或 unknown,并受 thisUpdate/nextUpdate 限定。 | RFC 6960 | §2.2、§4.2 |
所有条款均为转述。NextPDF 不复现规范性原文;权威措辞请查阅已发布的标准。NextPDF 不作出任何 PAdES 认证声明。 此处描述的归档结构与 ETSI EN 319 142 所定义的长期级别对齐;不声称任何符合性测试结果或第三方鉴证。ETSI EN 319 142-1 的基准级别部分不在所引用的证据集之内;所引用的 ETSI 证据是 EN 319 142-2,而 ISO 与 RFC 锚点承载长期、时间戳与吊销方面的主张。
行为契约
标题为“行为契约”的章节- DSS、VRI、LTV 健康检查与归档循环接口仅限 Enterprise。Core 生产 B-B 与 B-T(带时间戳);仅 Pro 的部署生产 B-B 与 B-T,但无法生产或维护长期(B-LT/B-LTA)签名。
- LTV 健康检查报告 DSS、OCSP/CRL、证书存储与 VRI 的结构性是否存在;它不会以密码学方式重新验证内嵌的吊销数据。
- 归档循环重写 DSS,并在更新后的状态之上添加一个新的文档时间戳。它必须在时间戳证书过期之前运行。
- 在未配置 TSA 或处于严格离线网络策略时,该循环失败关闭。
发布边界
标题为“发布边界”的章节本页仅记录外部可观察的行为与受支持的公开 API 接口。内部命名空间路径、辅助类、机制表、运维手册文件名与工单前缀不在范围之内。
Core 回退
标题为“Core 回退”的章节在仅 Core 的部署中,软件签名器生产 PAdES B-B 与 B-T(Core 自带 RFC 3161 时间戳路径)。Core 没有 DSS、VRI、LTV 健康检查或归档循环接口;长期级别会失败关闭并附带一个具名错误。本页所述的归档接口需要 nextpdf/enterprise。参见 安全 / 签名(Core)。
Pro 回退
标题为“Pro 回退”的章节在仅 Pro 的部署中,受支持的签名路径是 Core 的 B-B/B-T 基准,外加 Pro 的远程与云 KMS 签名工作流。Pro 不生产 DSS、不生产 VRI、不生产文档时间戳,也不运行任何归档循环。在仅 Pro 的部署中请求长期级别的配置会失败关闭,并附带一条指明缺失 Enterprise 组件的消息。参见 Pro 安全。
Enterprise 边界说明
标题为“Enterprise 边界说明”的章节DSS/VRI 组装、LTV 健康检查,以及归档循环,仅在行为层面进行描述。内部 DSS 重写顺序、按签名维度的 VRI 键控内部机制、健康检查结果分类的内部机制,以及循环排程的内部机制,不属于公开接口范围,此处不予复现。
部署边界
标题为“部署边界”的章节NextPDF Enterprise 维护验证素材;它与调用方提供的 OCSP/CRL 响应方及一个 RFC 3161 TSA 集成。它不运营、不托管,也不保证那些响应方或 TSA 的可用性。无限期有效性取决于响应方、TSA、归档循环排程,以及操作方——而不仅仅取决于 NextPDF Enterprise。 操作方负责 TSA 的选择与可达性、吊销响应方的访问或预先收集的素材、网络策略,以及在每个时间戳证书的 notAfter 之前运行归档循环。
法务合规边界
标题为“法务合规边界”的章节本页涉及密码学签名的长期验证与归档。与 ETSI EN 319 142 所定义的长期结构对齐是一项结构性声明,既不是法律意见,也不是认证。NextPDF 不作出任何 PAdES 认证声明。 请就你所负有的监管义务咨询你自己的合规与法务顾问。
另请参阅
标题为“另请参阅”的章节- 签名:PAdES B-LT / B-LTA —— 长期生产者。
- 安全 / 签名(Core) —— CMS、RFC 3161、RFC 5280、OCSP/CRL。
- Pro 安全 —— B-B 基准与 Enterprise 边界。
- PAdES 基准映射 —— 跨各版本的 B-B、B-T、B-LT、B-LTA。
- DSS · VRI · LTV · PAdES —— 术语表条目。