Pro 版本
安全性
NextPDF Pro 在 NextPDF Core 之上加入一個安全範圍:產生時內容遮蔽、文字層 PII 偵測、遠端與雲端 KMS 簽署策略,以及多方循序簽署。NextPDF Core 產生 PAdES B-B 與 B-T 層級;Pro 產生相同的層級,並在其上加入這些簽署工作流程(對 B-T,一個 B-B 簽章加上一個位於簽章值上的 RFC 3161 signature-time-stamp)。本頁屬於行為層級。它陳述每一部分做什麼、不做什麼,以及 Enterprise 邊界從何處開始。
可用性與授權
標題為「可用性與授權」的區段此功能隨附於 NextPDF Pro(nextpdf/pro)中,並以一份 Pro 層級的授權封套啟用。沒有該權益的部署不會載入此功能的類別。比較各版本並取得授權。
Core 隨附軟體 CMS 簽署器、RFC 3161 時間戳記用戶端、RFC 5280 路徑驗證,以及 OCSP 與 CRL 撤銷檢查。Pro 加入遮蔽、PII 偵測,以及遠端/雲端 KMS/循序簽署工作流程;這些工作流程會透過 Core 的 RFC 3161 堆疊產生相同的 Core B-B 與 B-T 層級(對 B-T,一個位於簽章值上的 signature-time-stamp)。沒有有效 Pro 權益的部署不會載入這些類別;Core 簽署合約會持續原封不動地運作。
composer require nextpdf/pro:^3概念總覽
標題為「概念總覽」的區段遮蔽引擎會在頁面寫出之前,對文字套用一個有序的規則清單。每條規則會比對一個正規表示式。一條規則會以三種方式之一取代相符處:一個從內容串流移除文字的 black-box 填充、一段相同字元數的星號,或一個固定標籤(例如 [REDACTED])。如經測試所驗證,引擎在 black-box 模式下會移除底層的文字物件;它並不主張每一種形式的敏感內容都已被找到。偵測取決於你所設定的規則。
PII 範圍是一個偵測工具,而非遮蔽的保證。它會擷取文字層,再套用針對電子郵件地址、電話號碼、美國社會安全號碼與信用卡號碼的內建樣式。它會回傳文字的遮蔽檢視,以及相符的計數。它不會覆寫頁面影像中已彩現的字符。一個沒有文字層的掃描頁面不會產生任何相符。請將結果視為對所設定型別進行的樣式比對偵測,而非完整的個人資料移除。
簽署範圍在 Core 簽署器之上加入遠端與非同步工作流程。一個工作階段會計算文件摘要、建構 CMS 簽署屬性,並將簽署屬性位元組交給一個簽署策略。一個策略可以是一個雲端 KMS、一個延遲的外部簽署器,或一個包裝既有 CAdES 或 XAdES 簽章的匯入路徑。工作階段接著會組裝 CMS SignedData,並將它以 DER 編碼存放在簽章字典的 Contents 項目中——ISO 32000-2 §12.8.1。SignerInfo 承載 content-type 與 message-digest 簽署屬性;訊息摘要計算程序為 RFC 5652 §5.4。驗證器不得依賴由發起方計算的摘要;它會獨立重新計算內容摘要,並與 message-digest 屬性比對,且該比對必須相符,簽章才有效——RFC 5652 §5.6 簽章驗證程序。
NextPDF Core 產生 PAdES B-B 與 B-T 層級;NextPDF Pro 產生相同的層級,並在其上加入自身的簽署工作流程。對 B-B,工作階段會組裝一個帶有 B-B 簽署屬性集的 CMS SignedData,並不套用任何時間戳記。對 B-T,工作階段會在簽章值上加入恰好一個作為 CMS 未簽署 屬性的 RFC 3161 signature-time-stamp:一個 signature-time-stamp 是一個未簽署屬性,承載一個在簽署者數位簽章值上計算出的時間戳記符記——ETSI EN 319 122-1 §5.3,而其 MessageImprint 是 SignerInfo 簽章欄位值的雜湊,由 id-aa-timeStampToken OID 識別——RFC 3161 Appendix A。時間戳記 genTime 即為符記建立時的 UTC 瞬時——RFC 3161 §2.4.2。由於時間戳記是一個未簽署屬性,B-B 簽署摘要、SignerInfo 簽章值,以及 PDF /ByteRange 都維持不變;只有 CMS 增長。RFC 3161 符記是向一個所設定的時間戳記提供者(預設的 Core RFC 3161 用戶端,或呼叫端提供的提供者)取得;B-T 在預設提供者路徑上使用一個 SHA-256 message imprint。NextPDF Pro 依 ETSI EN 319 122-1 §5.3、RFC 3161、RFC 5652 與 RFC 5816 實作 PAdES B-T 簽署支援;此項通過 fixture 驗證。NextPDF Pro 並不主張獨立的 ETSI EN 319 142-1 認證,也不主張文件的法律效力。B-LT 與 B-LTA 會為長期封存驗證加入一個文件安全儲存區與文件時間戳記——ETSI EN 319 142-2 §5.5;那些層級是一項 Enterprise 功能(nextpdf/enterprise),且不由 Pro 產生。請參閱下方的 Enterprise 邊界。
為何如此設計
標題為「為何如此設計」的區段簽署範圍會把簽署屬性位元組交給一個 SigningStrategy,而非持有一把私密金鑰。這個單一決策至關重要。一個雲端 KMS、一個延遲的外部簽署器,或一個 CAdES/XAdES 匯入路徑,全都滿足同一份合約,因此呼叫端程式碼維持一致,而金鑰材料從不進入 NextPDF。將工作階段拆分為 RemoteSigningSession::prepare() 與 RemoteSigningSession::complete(),讓簽章得以非同步回傳,因為摘要在觸及金鑰之前就已固定。時間戳記是作為一個 CMS 未簽署 屬性附加,因此 B-T 維持累加性:B-B 簽署摘要、SignerInfo 簽章值,以及 /ByteRange 都不受影響。每一道接縫都是 fail-closed 的,因為一條會默默降級的簽署路徑,比一條會停止的更糟。設計背景:大規模簽署,絕不妥協。
API 介面
標題為「API 介面」的區段| 型別 | 種類 | 角色 | 穩定度 | 自 |
|---|---|---|---|---|
RemoteSigningSession | class | 兩階段遠端或非同步簽署工作階段 | stable | 1.9.0 |
RemoteSigningConfig | class | 不可變的工作階段設定,含 PAdES 層級 | stable | 1.9.0 |
SequentialSigner | class | 支援 DocMDP 的多方循序簽署 | stable | 1.9.0 |
SigningStrategy | interface | 工作階段所呼叫的簽署機制合約 | stable | 1.9.0 |
PadesWrapper | class | 包裝既有的 CAdES 或 XAdES 簽章以供 PAdES 嵌入 | stable | 1.9.0 |
KmsSignerInterface | interface (SPI) | 第三方 HSM 與 KMS 驅動程式合約 | stable | 2.1.0 |
GenerationTimeMasker | class | 在頁面寫出之前套用、由規則驅動的遮蔽 | stable | 1.9.0 |
MaskingConfig / MaskingRule / MaskingMode | types | 遮蔽設定、規則與替換模式 | stable | 1.9.0 |
RemoteSigningConfig 承載一個 PAdES 層級欄位,其 enum 是 Core 的 SignatureLevel。Pro 簽署路徑產生 B-B 基準與 B-T 層級:設定 RemoteSigningConfig::default()->withLevel(SignatureLevel::PAdES_B_T)(或使用 SequentialSigner::withTimestamping())並提供一個時間戳記提供者,工作階段便會加入 RFC 3161 signature-time-stamp 未簽署屬性。B-T 保留的 /Contents 空間會自動提高以容納該符記;設定過小的空間會以一個具型別的設定錯誤 fail closed,而非進行截斷。在設定中承載一個高於 B-T 的層級(B-LT 或 B-LTA)是一個 Pro 不會對其採取行動的前向宣告值;該長期產生器會在執行階段透過 Core 合約解析,並隨附於 nextpdf/enterprise 套件中。
程式碼範例——快速上手
標題為「程式碼範例——快速上手」的區段<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\RemoteSigningSession;use NextPDF\Pro\Security\Signing\SigningStrategy;
/** * Produce a signed PDF using any signing strategy. * * @param string $pdfWithPlaceholder PDF bytes with a signature placeholder. * @param SigningStrategy $strategy A cloud-KMS, deferred, or ingest strategy. * * @return string The signed PDF bytes. */function signWithStrategy(string $pdfWithPlaceholder, SigningStrategy $strategy): string{ $session = RemoteSigningSession::create($pdfWithPlaceholder);
$session->prepare( certDer: $strategy->getCertificateDer(), chainDer: $strategy->getCertificateChainDer(), algorithmOid: $strategy->getSignatureAlgorithmOid(), digestAlgorithm: $strategy->getDigestAlgorithm(), contentsHexStart: 0, contentsHexEnd: 0, );
return $session->complete($strategy);}呼叫端依賴 SigningStrategy 合約。一個雲端 KMS 策略與一個 CAdES 匯入策略都會滿足它,因此這段程式碼在不同策略之間不會改變。
程式碼範例——正式環境
標題為「程式碼範例——正式環境」的區段<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\SequentialSigner;use NextPDF\Pro\Security\Signing\SigningStrategy;use Psr\Log\LoggerInterface;
final readonly class ApprovalWorkflow{ public function __construct(private LoggerInterface $logger) {}
/** * Sign a PDF with two parties in sequence. * * @param string $pdfData The PDF bytes to sign. * @param SigningStrategy $approver The first-party strategy. * @param SigningStrategy $reviewer The second-party strategy. * * @return string The signed PDF bytes. */ public function run(string $pdfData, SigningStrategy $approver, SigningStrategy $reviewer): string { try { $result = SequentialSigner::create($pdfData) ->addSigner($approver, 'Approver', reason: 'Approved') ->addSigner($reviewer, 'Reviewer', reason: 'Reviewed') ->sign();
$this->logger->info('Sequential signing complete', [ 'signatures' => $result->signatureCount, ]);
return $result->pdfData; } catch (\Throwable $e) { $this->logger->error('Sequential signing failed', ['error' => $e->getMessage()]);
throw $e; } }}每位簽署者都是一個獨立的增量修訂版。catch 區塊會記錄並重新拋出;它不會吞下失敗,這讓簽署路徑維持 fail-closed。
邊界案例與陷阱
標題為「邊界案例與陷阱」的區段- 已產生的簽章不等於已驗證的簽章。路徑驗證會在驗證器端,以該驗證器的信任錨點執行——RFC 5280 §6.1。產生者無法主張結果。
- 遮蔽偵測取決於所設定的規則。一組不符合某個值的規則集不會遮蔽它。引擎並不主張所有敏感內容都已被找到。
- PII 偵測僅限文字層。一個沒有文字層的掃描頁面不會產生任何相符。此工具不會覆寫已彩現的頁面字符。
- CMS 結構必須容納於保留的
Contents空間內。帶有完整憑證鏈的 B-B SignedData 有其大小;請據此調整保留空間的大小,否則工作階段會引發溢位錯誤。 - 一個雲端 KMS 策略取決於網路可連線性與提供者可用性。一個網路或提供者錯誤會引發一個具型別的例外;工作階段不會默默產生一份未簽署的文件。
- OCSP
unknown不等於good。請將unknown視為一種未定論——RFC 6960 §2.2。
一個軟體簽章為個位數毫秒。一個雲端 KMS 簽章會向提供者增加一次網路來回。一個 B-T 簽章會在簽署運算之上,向所設定的時間戳記提供者增加一次來回。1500 ms 的牆鐘預算涵蓋在暖連線上以遠端提供者進行的單一 B-B 簽章。遮蔽成本會隨規則數量與文字長度而擴展。可重現性設定檔為 structural:B-B 簽署屬性會嵌入簽署瞬時,而一個 B-T 簽章會額外嵌入一個時間戳記符記,因此兩次執行在簽署時間與時間戳記位元組上會不同,而簽署結構則相同。
安全注意事項
標題為「安全注意事項」的區段這是一個密碼學邊界,因此威脅模型是明確的。位元組範圍由引擎計算,且從不接受自呼叫端。簽署路徑是 fail-closed 的:一個原語失敗或一個能力缺口會引發一個具型別的例外,且絕不會默默降級到較弱的演算法。一個雲端 KMS 策略是一個整合點,而非一個金鑰儲存區。金鑰保護取決於金鑰處理、所設定的 KMS,以及部署;NextPDF Pro 不為一個 KMS 策略持有私密金鑰。Pro 在設定為對接一個通過 FIPS 驗證的 KMS 或 HSM 時,會以 FIPS 相容模式運作;NextPDF Pro 本身並不是一個通過 FIPS 驗證的密碼學模組。本頁涉及密碼學簽署;每一個規範性來源都經過改寫,無一被重製。
資料落地與 PII 緩解措施
標題為「資料落地與 PII 緩解措施」的區段遮蔽與 PII 範圍在行程內執行。不會有任何文件內容為了遮蔽或 PII 偵測而離開主機。一個雲端 KMS 策略只會為簽署運算把簽署屬性摘要(而非文件)送往提供者。如經測試所驗證,PII 偵測會對所設定型別進行樣式比對,並針對 black-box 模式移除底層文字物件;它不是完整個人資料移除的保證,也不是法規符合性的聲明。
安全遙測與日誌清洗
標題為「安全遙測與日誌清洗」的區段函式庫會引發帶有結構性訊息的具型別例外。它不會把文件內容或偵測到的 PII 值寫入例外訊息或日誌。在簽署路徑周邊進行日誌記錄的部署,應記錄正式環境範例中所示的結構性欄位,而非文件位元組。
FIPS 模式行為
標題為「FIPS 模式行為」的區段Pro 會從所設定的簽章演算法與策略選擇演算法。當設定為對接一個通過 FIPS 驗證的 KMS 或 HSM 時,密碼學運算會在該已驗證邊界內執行。NextPDF Pro 本身執行結構性組裝與摘要計算;它不是一個通過 FIPS 驗證的模組,也不做任何 FIPS 認證聲明。
Enterprise 邊界
標題為「Enterprise 邊界」的區段NextPDF Pro 產生 B-B 基準與 B-T 層級。B-T 會在簽章值上加入一個作為 CMS 未簽署屬性的 RFC 3161 signature-time-stamp,並在簽署者的數位簽章值上計算——ETSI EN 319 122-1 §5.3。NextPDF Pro 依 ETSI EN 319 122-1 §5.3、RFC 3161、RFC 5652 與 RFC 5816 實作此項;它通過 fixture 驗證。NextPDF Pro 並不主張獨立的 ETSI EN 319 142-1 認證,也不主張文件的法律效力。
B-LT 與 B-LTA 層級是 Enterprise 功能,且不由 Pro 產生。B-LT 與 B-LTA 會為長期封存驗證加入一個文件安全儲存區與文件時間戳記——ETSI EN 319 142-2 §5.5。一個請求文件安全儲存區或長期存檔迴圈的設定,會在執行階段透過 Core 合約解析該產生器;該產生器隨附於 nextpdf/enterprise 套件中。在僅有 Pro 的部署中,請求 B-LT 或 B-LTA 會 fail closed,並附上一則指名缺少之 Enterprise 元件的訊息。Pro 不產生任何文件安全儲存區、任何 VRI 字典、任何文件時間戳記,也沒有任何存檔迴圈,並不做任何長期驗證(LTV)聲明。透過 PKCS#11 進行的硬體金鑰保管,以及 FIPS 140-3 加密政策設定檔,同樣是 Enterprise 功能。
| PAdES 層級 | 加入 | 產生器版本 |
|---|---|---|
| B-B | 帶有已簽署屬性的 CMS 簽章 | Core、Pro、Enterprise |
| B-T | 一個位於簽章值上的 RFC 3161 signature-time-stamp 未簽署屬性 | Core、Pro、Enterprise |
| B-LT | 帶有驗證材料的文件安全儲存區 | Enterprise(nextpdf/enterprise) |
| B-LTA | 用於存檔有效性的文件時間戳記 | Enterprise(nextpdf/enterprise) |
行為合約
標題為「行為合約」的區段- 遮蔽會在頁面寫出之前套用所設定的規則,並如經測試所驗證地在 black-box 模式下移除底層文字物件。
- PII 偵測會擷取文字層、套用所設定的樣式,並回傳一個遮蔽檢視與一個相符計數。它不會覆寫已彩現的字符。
- 遠端簽署是兩階段的:prepare 計算摘要並建構簽署屬性;complete 組裝 CMS 並嵌入它。
- Pro 產生 B-B 基準與 B-T 層級。對 B-T,工作階段會在簽章值上加入一個作為 CMS 未簽署屬性的 RFC 3161 signature-time-stamp;B-B 簽署摘要與
/ByteRange維持不變。一個沒有時間戳記提供者,或帶有設定過小Contents空間的 B-T 請求,會以一個具型別的設定錯誤 fail closed。一個沒有 Enterprise 套件的 B-LT 或 B-LTA 請求,會以一個具名錯誤 fail closed。 - 一個雲端 KMS 策略會收到簽署屬性摘要(而非文件),並回傳原始簽章位元組。
一致性
標題為「一致性」的區段| 聲明 | 標準 | 條款 |
|---|---|---|
CMS 簽章以 DER 編碼存放於簽章字典的 Contents 項目中。 | ISO 32000-2 | §12.8.1 |
| 訊息摘要計算程序;簽署屬性承載 content-type 與 message-digest。 | RFC 5652 | §5.4 |
| 驗證器不得依賴由發起方計算的摘要;它會獨立重新計算並比對(簽章驗證程序)。 | RFC 5652 | §5.6 |
| 一個 PAdES B-T signature-time-stamp 是一個未簽署屬性,承載一個在簽署者數位簽章值上計算出的時間戳記符記(Pro 產生 B-T)。 | ETSI EN 319 122-1 | §5.3 |
signature-time-stamp 的 id-aa-timeStampToken 符記的 MessageImprint 是 SignerInfo 簽章欄位值的雜湊。 | RFC 3161 | Appendix A |
在驗證端,NextPDF 會將一個 signature-time-stamp 的 MessageImprint 綁定至 SignerInfo 簽章值,並在不相符、符記缺失/重複,或 SHA-1 imprint 時 fail closed(嚴格驗證,而非認證)。 | RFC 3161 | Appendix A |
| 一個 B-T 時間戳記符記承載一個 UTC genTime,即為符記建立的瞬時。 | RFC 3161 | §2.4.2 |
| 認證路徑驗證會檢查基本約束與通往信任錨點的路徑輸入。 | RFC 5280 | §6.1 |
| OCSP 將 certStatus 回報為 good、revoked 或 unknown。 | RFC 6960 | §2.2 |
| B-LT 與 B-LTA 為長期驗證加入一個文件安全儲存區與文件時間戳記(Enterprise 邊界)。 | ETSI EN 319 142-2 | §5.5 |
所有條款皆為改寫。NextPDF 不重製規範性文字。請查閱已發布的標準以取得權威用語。NextPDF Pro 依 ETSI EN 319 122-1 §5.3(signature-time-stamp)、RFC 3161、RFC 5652 與 RFC 5816 實作 PAdES B-T 簽署支援,並通過 fixture 驗證。ETSI EN 319 142-1(PAdES 基準層級部分)不在所引用的證據集合之內;因此 NextPDF Pro 並不主張獨立的 ETSI EN 319 142-1 認證、一致性或符合性,也不主張文件的法律效力。本頁陳述所產生的結構、B-T 支援所實作的標準,以及 Enterprise B-LT/B-LTA 邊界,而非一個經認證的一致性層級。
發布邊界
標題為「發布邊界」的區段本頁僅記載可外部觀察的行為,以及受支援的公開 API 介面。內部命名空間路徑、輔助類別、機制表格、runbook 檔名,以及工單前綴,皆不在範圍內。
另請參閱
標題為「另請參閱」的區段- 安全性——深入參考 — 此 Pro 安全範圍的深入參考。
- Core 簽署 — CMS 簽署器、RFC 3161 時間戳記、RFC 5280 路徑驗證、OCSP 與 CRL。
- PAdES 基準對應 — 跨版本的 B-B、B-T、B-LT、B-LTA。
- NextPDF Pro — 完整的 Pro 功能範圍。
- Core 安全 — 加密與更廣泛的簽章範圍。
- CMS · PAdES · RFC 3161 timestamp · KMS · DSS — 詞彙表條目。