Перейти к содержимому
getnextpdf.com

Enterprise редакция

Политика Certificate Transparency для сертификатов подписания

NextPDF Enterprise позволяет рабочему процессу подписания учесть позицию Certificate Transparency (CT) сертификата подписания до подписания. CT — это экосистема публичных журналов, в которой сертификаты регистрируются так, чтобы ошибочная выдача была обнаруживаемой; сертификат, занесённый в CT, несёт одну или несколько Signed Certificate Timestamp (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. Certificate Transparency версии 2.0 сохраняет ту же модель: журнал возвращает SCT при отправке, которую отправитель проверяет, прежде чем полагаться на неё, согласно RFC 9162 §3.

NextPDF Enterprise представляет позицию CT сертификата как значение-результат, несущее:

  • содержит ли сертификат расширение SCT;
  • общее число найденных SCT;
  • число SCT, подписи которых действительны;
  • идентификаторы журналов — хеши SHA-256 — журналов, выдавших SCT.

Результат предоставляет проверку порога по минимуму SCT: он сообщает, достигает ли число действительных SCT требуемого минимума или превышает его. Минимум вы задаёте под свою политику. Распространённая политика ожидает не менее двух SCT из разных журналов для сертификатов с более коротким сроком жизни и больше — для более долгоживущих; значение порога выбираете вы.

Используйте проверку порога как барьер в рабочем процессе подписания: требуйте сертификат, занесённый в CT (достаточное число действительных SCT), прежде чем подписывать, и отказывайте в противном случае.

Certificate Transparency отвечает на узкий вопрос: занесён ли этот сертификат в публичные журналы и сколькими независимыми журналами. NextPDF Enterprise моделирует этот ответ как простое значение-результат, а не как вердикт. Результат сообщает флаг расширения SCT, счётчики SCT и идентификаторы выдавших журналов — и на этом останавливается. Он не решает, достаточно ли хороша эта позиция, потому что порог доверия — это политика полагающейся стороны, зависящая от срока жизни сертификата и риска. Поэтому число минимума SCT задаёте вы, а NextPDF остаётся вне ролей оператора журнала, аудитора и монитора. Certificate Transparency — одна из нескольких проверок в обоснованном решении о подписании, и эта страница делает её явным барьером до конструирования подписанта.

Проектный контекст: Правильная проверка подписи.

  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. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов — вне области рассмотрения.