CMS SubjectKeyIdentifier 簽署器
HotPDF 可以改用 X.509 subjectKeyIdentifier 擴充欄位來識別 CMS 主要簽署器,而不是靠簽發者名稱與憑證序號
選擇識別碼
HPDFCMSDefaultOptions 把 THPDFCMSSignOptions.SignerIdentifier 設為 cmsidIssuerAndSerialNumber,既有呼叫端因此能保留原本確定論式的 CMS 位元組形狀
在呼叫 HPDFCMSBuildSignedDataEx、以提供者為基礎的 CMS 建置器、佔位符估算,或任何接受 THPDFCMSSignOptions 的高階簽署多載之前,把此欄位設為 cmsidSubjectKeyIdentifier
Options := HPDFCMSDefaultOptions(palBaseline_B_B);
Options.SignerIdentifier := cmsidSubjectKeyIdentifier;
CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);
憑證要求
簽署器憑證必須恰好包含一個 OID 為 2.5.29.14 的非空 X.509 擴充欄位,其擴充值含有完整的 DER OCTET STRING
當該擴充欄位缺失、重複、空白、被截斷或格式錯誤時,HotPDF 會在簽署前就失敗;它不會從公開金鑰合成金鑰識別碼
即使 SignerInfo 的 SID 改用金鑰識別碼,SigningCertificateV2 仍然以其簽發者與序號欄位綁定同一張憑證
傳輸格式與驗證
金鑰識別碼編碼為 primitive IMPLICIT [0],SignerInfo.version 為 3,而依 RFC 5652 的要求,產生的單一簽署器 SignedData.version 也是 3
驗證要求 SID 位元組與內嵌憑證擴充欄位相符,並拒絕不符的 SID 值、簽署器版本非 1 的 issuer-and-serial 記錄、簽署器版本非 3 的 SKI 記錄,以及外層版本低於 3 的 SKI 容器
這種緊湊的身分表示對導向金鑰的憑證存放區,以及不保留簽發者名稱編碼的工作流程很有用,但消費端軟體必須支援 RFC 5652 的 SKI 選項
HPDFCMSBuildCounterSignerInfo 繼續使用 issuer-and-serial 身分;主要簽署器請透過 THPDFCMSSignOptions 設定