跳到內容
getnextpdf.com

Enterprise 版本

簽署憑證的憑證透明度(Certificate Transparency)原則

NextPDF Enterprise 讓簽署工作流程在簽署前,將一份簽署憑證的憑證透明度(CT)態勢納入考量。CT 是一個公開記錄生態系,憑證被記錄於其中,使誤簽發可被偵測;一份記錄於 CT 的憑證會帶有一個或多個已簽署憑證時間戳記(SCT)。NextPDF Enterprise 將一份憑證的 CT 態勢表示為一個結果值——SCT 擴充是否存在、有多少 SCT 存在且有效,以及它們由哪些記錄簽發——並提供一個最低 SCT 門檻檢查。本頁屬於行為層級:它說明結果承載什麼、門檻檢查如何運作,以及 NextPDF 決定與不決定什麼。

NextPDF Enterprise 表示並門檻檢查一個 CT 結果;它不是一個 CT 記錄、一個記錄稽核者,也不是一個監控器。該邊界陳述於 安全與合規

先決條件陳述於前置資料中,並在 先決條件 處重申。

此能力隨附於 NextPDF Enterprisenextpdf/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 則置身於記錄營運者、稽核者與監控器的角色之外。憑證透明度是一項健全簽署決策中的數項檢查之一,而本頁使它成為簽署器建構之前的一道明確閘門。

設計背景:正確地驗證一份簽章

  1. 安裝 NextPDF Core 與 Enterprise 套件,並持有一份有效的 Enterprise 授權。
  2. 備妥你想要強制其 CT 態勢的簽署憑證,連同你的環境從中擷取出的 SCT 資料。
  3. 決定你的原則所要求的最低 SCT 門檻。
  • 最低 SCT 門檻 — 一份憑證必須帶有、才能通過你原則的有效 SCT 數量。將它傳給門檻檢查。
  • 原則放置位置 — 決定該閘門在你的簽署工作流程中於何處執行:在建構簽署器之前,使一份記錄不足的憑證絕不會抵達任何簽署操作。
  1. 取得你簽署憑證的 CT 結果,承載 SCT 擴充旗標、SCT 總數與有效數,以及記錄識別碼。
  2. 決定你原則的最低 SCT 門檻。
  3. 執行門檻檢查;將通過視為「CT 原則已滿足」,將失敗視為「拒絕以此憑證簽署」。
  4. 在簽署器建構之前,以結果作為簽署工作流程的閘門。
examples/enterprise/ct-policy-gate.php
<?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;
}
}
  1. 建構一個 SCT 擴充存在、且有效 SCT 數量等於你門檻的結果,並確認門檻檢查通過。
  2. 建構一個低於你門檻一個的結果,並確認檢查失敗。
  3. 建構一個 SCT 擴充不存在的結果,並確認無論數量為何,閘門都拒絕。
  4. 確認當閘門拒絕時,你的簽署工作流程不會建構簽署器。
  • 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 介面。內部命名空間路徑、輔助類別、機制表格、操作手冊檔名,以及票券前綴皆不在範圍內。