以 PAdES 基線簽章簽署 PDF(已移動)
本範例已移動
標題為「本範例已移動」的區段本頁過去收錄的簽署步驟現已被取代。請改用正規範例:
本頁為何變更(勘誤)
標題為「本頁為何變更(勘誤)」的區段本頁早期版本曾指出,高階的 Document::setSignature() → save() 接縫尚未接通,且會擲出 NotImplementedException。**這已不再成立。**這個高階接縫現在會產出真正的簽章。
Document::setSignature($cert, SignatureLevel::PAdES_B_B)->save()(以及等效的 output() / getPdfData())會寫入一個 /Sig 欄位,欄位內含一個 /ByteRange,以及一個以 DER 編碼、放在簽章字典 Contents 項目中的 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 驗證」是指所產出的物件是符合 RFC 5652 與 ISO 32000-2 §12.8 的、格式正確的 CMS
SignedData; 它並非對 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)。
本頁並未斷言任何由此產生的簽章具有法律效力。這取決於憑證、其信任錨點,以及驗證方的政策,而這些都不在本函式庫的範圍之內。