Enterprise 版本
簽署憑證的憑證透明度(Certificate Transparency)原則
NextPDF Enterprise 讓簽署工作流程在簽署前,將一份簽署憑證的憑證透明度(CT)態勢納入考量。CT 是一個公開記錄生態系,憑證被記錄於其中,使誤簽發可被偵測;一份記錄於 CT 的憑證會帶有一個或多個已簽署憑證時間戳記(SCT)。NextPDF Enterprise 將一份憑證的 CT 態勢表示為一個結果值——SCT 擴充是否存在、有多少 SCT 存在且有效,以及它們由哪些記錄簽發——並提供一個最低 SCT 門檻檢查。本頁屬於行為層級:它說明結果承載什麼、門檻檢查如何運作,以及 NextPDF 決定與不決定什麼。
NextPDF Enterprise 表示並門檻檢查一個 CT 結果;它不是一個 CT 記錄、一個記錄稽核者,也不是一個監控器。該邊界陳述於 安全與合規。
先決條件陳述於前置資料中,並在 先決條件 處重申。
版本與授權
標題為「版本與授權」的區段此能力隨附於 NextPDF Enterprise(nextpdf/enterprise),並由一份 Enterprise 級授權封套啟用。一個不具該授權的部署不會載入此能力的類別。比較各版本並取得授權。
此能力做了什麼
標題為「此能力做了什麼」的區段一份記錄於 CT 的憑證會帶有多個 SCT。一個 SCT 帶有一個版本、一個記錄識別碼、一個時間戳記,以及記錄對憑證項目的簽章,依 RFC 6962 §3.1。記錄會回傳一個 SCT 作為它將該憑證納入其僅可附加記錄的承諾,而依賴方會拒絕缺少有效 SCT 的憑證,依 RFC 6962 §3。憑證透明度 2.0 版維持相同的模型:記錄會在提交時回傳一個 SCT,由提交者在依賴它之前先行驗證,依 RFC 9162 §3。
NextPDF Enterprise 將一份憑證的 CT 態勢表示為一個結果值,承載:
- 憑證是否包含 SCT 擴充;
- 找到的 SCT 總數;
- 簽章有效的 SCT 數量;
- 簽發那些 SCT 之記錄的記錄識別碼——SHA-256 雜湊。
結果公開一個最低 SCT 門檻檢查:它會回報有效 SCT 的數量是否達到或超過所需的最低值。你可設定該最低值以符合你的原則。一個常見的原則會對較短壽命的憑證要求至少兩個來自不同記錄的 SCT,並對較長壽命的要求更多;門檻值由你選定。
請將門檻檢查當作簽署工作流程中的一道閘門:在簽署前要求一份記錄於 CT 的憑證(足夠數量的有效 SCT),否則拒絕。
為何如此設計
標題為「為何如此設計」的區段憑證透明度回答一個狹窄的問題:這份憑證是否已被公開記錄,以及被多少個獨立記錄所記錄。NextPDF Enterprise 將該答案建模為一個單純的結果值,而非一個裁決。結果會回報 SCT 擴充旗標、SCT 數量,以及簽發記錄的識別碼,然後就此打住。它不決定該態勢是否足夠好,因為信任門檻是一項依賴方原則,會隨憑證壽命與風險而異。因此最低 SCT 數量仍由你設定,而 NextPDF 則置身於記錄營運者、稽核者與監控器的角色之外。憑證透明度是一項健全簽署決策中的數項檢查之一,而本頁使它成為簽署器建構之前的一道明確閘門。
設計背景:正確地驗證一份簽章。
先決條件
標題為「先決條件」的區段- 安裝 NextPDF Core 與 Enterprise 套件,並持有一份有效的 Enterprise 授權。
- 備妥你想要強制其 CT 態勢的簽署憑證,連同你的環境從中擷取出的 SCT 資料。
- 決定你的原則所要求的最低 SCT 門檻。
- 最低 SCT 門檻 — 一份憑證必須帶有、才能通過你原則的有效 SCT 數量。將它傳給門檻檢查。
- 原則放置位置 — 決定該閘門在你的簽署工作流程中於何處執行:在建構簽署器之前,使一份記錄不足的憑證絕不會抵達任何簽署操作。
逐步說明
標題為「逐步說明」的區段- 取得你簽署憑證的 CT 結果,承載 SCT 擴充旗標、SCT 總數與有效數,以及記錄識別碼。
- 決定你原則的最低 SCT 門檻。
- 執行門檻檢查;將通過視為「CT 原則已滿足」,將失敗視為「拒絕以此憑證簽署」。
- 在簽署器建構之前,以結果作為簽署工作流程的閘門。
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\CertificateTransparency\CtValidationResult;use Psr\Log\LoggerInterface;
final readonly class CtSigningPolicy{ /** * @param int<1, max> $minimumScts The minimum count of valid SCTs your policy requires. */ public function __construct( private int $minimumScts, private LoggerInterface $logger, ) {}
/** * Decide whether a certificate's CT posture satisfies the policy. * * The gate runs before the signer is constructed, so an under-logged * certificate never reaches a signing operation. A missing SCT extension * is treated as a policy failure, not an exception. * * @param CtValidationResult $result The CT posture of the signing certificate. * * @return bool True when the certificate meets the minimum-SCT threshold. */ public function isAcceptable(CtValidationResult $result): bool { if (! $result->hasSctsExtension) { $this->logger->warning('Signing certificate carries no SCT extension; CT policy not met.');
return false; }
$acceptable = $result->meetsPolicy($this->minimumScts);
if (! $acceptable) { $this->logger->warning('Signing certificate has too few valid SCTs for the CT policy.', [ 'validScts' => $result->validScts, 'minimumScts' => $this->minimumScts, ]); }
return $acceptable; }}- 建構一個 SCT 擴充存在、且有效 SCT 數量等於你門檻的結果,並確認門檻檢查通過。
- 建構一個低於你門檻一個的結果,並確認檢查失敗。
- 建構一個 SCT 擴充不存在的結果,並確認無論數量為何,閘門都拒絕。
- 確認當閘門拒絕時,你的簽署工作流程不會建構簽署器。
安全與合規
標題為「安全與合規」的區段- NextPDF 表示並門檻檢查;它不營運記錄。 NextPDF Enterprise 呈現 CT 態勢與一個最低 SCT 檢查。它不是一個 CT 記錄、一個稽核者,也不是一個監控器,且它不會將憑證提交給記錄。
- 門檻是你的原則。 最低 SCT 值由你設定;NextPDF 不強加任何數字。缺少 SCT 擴充是明確的原則失敗。
- 在你簽署前先設閘門。 在建構簽署器之前執行檢查,使一份記錄不足的憑證絕不會抵達任何簽署操作。
- SCT 語意遵循標準。 一個 SCT 是記錄的一項承諾,依賴方預期它存在且有效(RFC 6962 §3;§3.1 結構;CT v2 RFC 9162 §3)。
本頁涉及憑證信任。每一項規範性來源皆為改寫;不重製任何規範性文字。
失敗處理
標題為「失敗處理」的區段- 無 SCT 擴充。 將一個沒有 SCT 擴充的結果視為原則失敗;拒絕簽署。
- 有效 SCT 過少。 低於你門檻的有效 SCT 數量會使檢查失敗;拒絕簽署。
- 原則放置位置。 在簽署器建構之前執行閘門;一個在簽署之後才執行的延遲檢查,無法保護已產生的文件。
發佈邊界
標題為「發佈邊界」的區段本頁僅記錄外部可觀察的行為與受支援的公開 API 介面。內部命名空間路徑、輔助類別、機制表格、操作手冊檔名,以及票券前綴皆不在範圍內。
另請參閱
標題為「另請參閱」的區段- Security — NextPDF Enterprise — 整合後的 Enterprise 安全介面。
- Signature — NextPDF Enterprise — PAdES B-LT 與 B-LTA 長期產生器。
- HSM signing — NextPDF Enterprise — PKCS#11 硬體金鑰保管。
- 安全 / 簽署(Core) — Core CMS 簽署器與簽署策略合約。
- Certificate Transparency · SCT — 詞彙表條目。