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

Enterprise редакция

Certificate Transparency — глубокий справочник

Эта страница — подробный справочник по поверхности Certificate Transparency (CT) в NextPDF Enterprise. Поверхность представлена одним неизменяемым объектом-значением: NextPDF\Enterprise\Security\CertificateTransparency\CtValidationResult. Он обобщает состояние Signed Certificate Timestamp (SCT) для подписывающего сертификата X.509. Он несёт флаг наличия расширения SCT, общее и валидное количество SCT, а также идентификаторы выпускающих логов. Он предоставляет один метод политики, meetsPolicy(), реализующий проверку минимального порога SCT. Тип представляет результат; он не извлекает SCT, не проверяет подписи SCT и не обращается к логам CT. Руководство уровня рабочего процесса см. в разделе Политика Certificate Transparency для подписывающих сертификатов.

Эта возможность поставляется в составе NextPDF Enterprise (nextpdf/enterprise) и активируется лицензионным конвертом уровня Enterprise. Развёртывание без такого права не загружает классы этой возможности. Сравните редакции и получите лицензию.

СимволПараметрыПоведение по умолчаниюВозвращаетВыбрасывает или завершается сПримечания
CtValidationResultНеизменяемый объект-значение, обобщающий состояние SCT сертификатаНе выбрасываетfinal readonly; все четыре свойства, продвинутые из конструктора, публичные
CtValidationResult::__constructbool $hasSctsExtension, int $totalScts, int $validScts, array<string> $logIdsСохраняет переданные значения как есть, без валидации и согласованияНовый экземпляр CtValidationResultОбъявленного @throws нет; PHP поднимает TypeError при несоответствии типов аргументов в режиме strict_typesПродвинутые публичные свойства readonly
CtValidationResult::meetsPolicyint $minimumScts = 2Сравнивает количество валидных SCT с порогом: validScts >= $minimumSctsboolНе выбрасываетСчитает только валидные SCT; не проверяет различность логов и наличие расширения
final readonly class CtValidationResult
public function __construct(
public bool $hasSctsExtension,
public int $totalScts,
public int $validScts,
public array $logIds,
) {}
public function meetsPolicy(int $minimumScts = 2): bool

Публичные свойства readonly

СвойствоТипЗначение
$hasSctsExtensionboolСодержит ли сертификат расширение SCT
$totalSctsintОбщее число SCT, найденных в расширении
$validSctsintЧисло SCT с валидными подписями, определённое вышестоящим уровнем
$logIdsarray<string>Идентификаторы логов (хеши SHA-256) логов CT, выпустивших SCT
  • CtValidationResult — это значение-результат. Оно представляет итог извлечения и проверки SCT, которые выполнило окружение вызывающей стороны. Оно не разбирает сертификаты, не проверяет подписи SCT, не запрашивает логи и не отправляет сертификаты в логи.
  • Речь идёт о расширении сертификата X.509v3 со встроенными SCT, идентифицируемом по OID 1.3.6.1.4.1.11129.2.4.2 — RFC 6962 §3.3. SCT несёт версию, идентификатор лога, метку времени, расширения и подпись лога над записью — RFC 6962 §3.2.
  • Каждая запись в $logIds — это идентификатор лога, определённый в RFC 6962 §3.2: хеш SHA-256 открытого ключа лога над его DER-кодированным SubjectPublicKeyInfo. Тип сохраняет строки как есть и не пересчитывает и не проверяет их.
  • meetsPolicy() реализует ровно одно сравнение: количество валидных SCT больше или равно порогу. Порог по умолчанию — 2.
  • meetsPolicy() не обращается к $hasSctsExtension. Политика, которая должна давать отказ при отсутствии расширения, проверяет это свойство отдельно — до проверки порога или вместе с ней.
  • meetsPolicy() не устраняет дубликаты в $logIds. Политика, требующая SCT из независимых логов, проверяет различность по самому $logIds.
  • Конструктор сохраняет входные данные дословно. Он не выполняет проверок диапазона и межполевых проверок согласованности.
  • Экземпляры неизменяемы (final readonly). Все чтения и проверка порога детерминированы и не имеют побочных эффектов.
  • Значение порога — политический выбор оператора; NextPDF не навязывает никакого числа. Исходный код пакета отмечает один ориентир из экосистемы: политика CT в Chrome по состоянию на 2024 год ожидает не менее двух SCT из разных логов для сертификатов со сроком действия до 180 дней и три — для более долгоживущих сертификатов. Это политика браузерной программы, а не требование IETF.
  • Предполагаемое место применения — предподписной барьер: рабочий процесс подписи отказывается создавать подписант, когда проверка не пройдена. Обоснование следует из модели доверия CT: SCT — это обещание лога включить сертификат, и полагающиеся стороны отклоняют сертификат, у которого нет валидного SCT — RFC 6962 §3. CT версии 2.0 сохраняет ту же модель: лог, принявший заявку, возвращает SCT, который отправитель проверяет, прежде чем полагаться на него — RFC 9162 §3.
  • Нулевой или отрицательный порог. meetsPolicy(0) возвращает true для любого неотрицательного $validScts. Метод не отклоняет это значение. Выбирайте порог не менее 1.
  • Расширение отсутствует, счётчики положительны. Когда $hasSctsExtension равно false, но $validScts достигает порога, meetsPolicy() всё равно возвращает true. Барьер должен проверять $hasSctsExtension явно, если отсутствие должно приводить к отказу; страница возможности показывает этот шаблон.
  • Дублирующиеся идентификаторы логов. N валидных SCT из одного лога удовлетворяют порогу N. Проверка порога не даёт никаких утверждений о независимости. Политики различности логов проверяют $logIds.
  • Несогласованные счётчики. Значение $validScts, большее $totalScts, или отрицательный счётчик сохраняются как есть. Исключение не поднимается. За согласованность входных данных отвечает вышестоящий шаг извлечения.
  • Непроверенные строки идентификаторов логов. Тип не требует, чтобы записи $logIds имели форму в 32 байта или шестнадцатеричный вид. Некорректные идентификаторы проходят без изменений.
  • Нет пути через исключение. Ни один метод этой поверхности не выбрасывает исключение при корректных типах PHP. Режим отказа проверки политики — это отказ (false), а не исключение. Несоответствие типов аргументов поднимает PHP TypeError в режиме strict_types, как и для любого типизированного PHP-API.

CtValidationResult не выполняет криптографических вычислений. Он не вычисляет дайджест и не проверяет подписи. Считается ли подпись SCT валидной, решает вышестоящий уровень — компонент, выполнивший проверку до создания результата. Профиль крипто-политики Enterprise FIPS 140-3, документированный вместе с модулем безопасности, поэтому не изменяет поведение этого типа.

УтверждениеСтандартПункт
SCT — это обещание лога включить сертификат; полагающиеся стороны отклоняют сертификат без валидного SCT.RFC 6962§3
SCT несёт версию, идентификатор лога, метку времени, расширения и подпись лога над записью.RFC 6962§3.2
Идентификатор лога — это хеш SHA-256 открытого ключа лога над его DER-кодированным SubjectPublicKeyInfo.RFC 6962§3.2
Встроенные SCT размещаются в расширении сертификата X.509v3, идентифицируемом по OID 1.3.6.1.4.1.11129.2.4.2.RFC 6962§3.3
В CT версии 2.0 лог, принявший заявку, возвращает SCT, который отправитель проверяет, прежде чем полагаться на него.RFC 9162§3

Все пункты изложены в пересказе; NextPDF не воспроизводит нормативный текст. NextPDF не делает заявлений о соответствии или сертификации по Certificate Transparency. NextPDF Enterprise не является логом CT, аудитором или монитором. Он не отправляет сертификаты в логи и не утверждает итог проверки CT. Тип представляет счётчики и идентификаторы, произведённые окружением вызывающей стороны, и оценивает выбранный вызывающей стороной порог. Браузерные программы CT, такие как программа Chrome, — это политики экосистемы, а не нормативные требования IETF; выбор и удовлетворение такой политики — ответственность оператора.

  • Объект-значение не имеет зависимостей и ввода-вывода. Создавайте экземпляры напрямую в модульных тестах.
  • Рекомендуемые граничные тесты: валидный счётчик ровно на пороге, на единицу ниже порога, отсутствие расширения при счётчиках на пороге и дублирующиеся идентификаторы логов против политики различности.
  • Класс объявлен с strict_types=1 и типизированными продвинутыми свойствами. Неверные типы аргументов поднимают PHP TypeError у вызывающей стороны.
  • Класс несёт аннотацию пакета @since со значением 1.0.0 и ссылается на RFC 6962 и RFC 9162 в документации исходного кода.
  • Параметр $logIds документирован как array<string>; статический анализ рассматривает свойство как массив строк. Сохраняйте эту форму при создании результатов.
  • Разместите вашу вышестоящую проверку CT и этот пороговый барьер до создания подписанта, чтобы недостаточно залогированный сертификат никогда не достигал операции подписи. Страница возможности документирует рабочий процесс и разобранный пример барьера.

Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов вне области рассмотрения.