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. Развёртывание без такого права не загружает классы этой возможности. Сравните редакции и получите лицензию.
Публичная поверхность API
Заголовок раздела «Публичная поверхность API»| Символ | Параметры | Поведение по умолчанию | Возвращает | Выбрасывает или завершается с | Примечания |
|---|---|---|---|---|---|
CtValidationResult | — | Неизменяемый объект-значение, обобщающий состояние SCT сертификата | — | Не выбрасывает | final readonly; все четыре свойства, продвинутые из конструктора, публичные |
CtValidationResult::__construct | bool $hasSctsExtension, int $totalScts, int $validScts, array<string> $logIds | Сохраняет переданные значения как есть, без валидации и согласования | Новый экземпляр CtValidationResult | Объявленного @throws нет; PHP поднимает TypeError при несоответствии типов аргументов в режиме strict_types | Продвинутые публичные свойства readonly |
CtValidationResult::meetsPolicy | int $minimumScts = 2 | Сравнивает количество валидных SCT с порогом: validScts >= $minimumScts | bool | Не выбрасывает | Считает только валидные SCT; не проверяет различность логов и наличие расширения |
final readonly class CtValidationResultpublic function __construct( public bool $hasSctsExtension, public int $totalScts, public int $validScts, public array $logIds,) {}public function meetsPolicy(int $minimumScts = 2): boolПубличные свойства readonly
| Свойство | Тип | Значение |
|---|---|---|
$hasSctsExtension | bool | Содержит ли сертификат расширение SCT |
$totalScts | int | Общее число SCT, найденных в расширении |
$validScts | int | Число SCT с валидными подписями, определённое вышестоящим уровнем |
$logIds | array<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), а не исключение. Несоответствие типов аргументов поднимает PHPTypeErrorв режимеstrict_types, как и для любого типизированного PHP-API.
Поведение в режиме FIPS
Заголовок раздела «Поведение в режиме FIPS»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и типизированными продвинутыми свойствами. Неверные типы аргументов поднимают PHPTypeErrorу вызывающей стороны. - Класс несёт аннотацию пакета
@sinceсо значением1.0.0и ссылается на RFC 6962 и RFC 9162 в документации исходного кода. - Параметр
$logIdsдокументирован какarray<string>; статический анализ рассматривает свойство как массив строк. Сохраняйте эту форму при создании результатов. - Разместите вашу вышестоящую проверку CT и этот пороговый барьер до создания подписанта, чтобы недостаточно залогированный сертификат никогда не достигал операции подписи. Страница возможности документирует рабочий процесс и разобранный пример барьера.
См. также
Заголовок раздела «См. также»- Политика Certificate Transparency для подписывающих сертификатов — страница возможности: рабочий процесс, конфигурация и разобранный барьер политики.
- Безопасность — NextPDF Enterprise — совокупная поверхность безопасности Enterprise.
- Подпись — подробный справочник — производитель долговременных подписей PAdES B-LT и B-LTA.
- Безопасность / Подпись (Core) — подписант CMS в Core и контракт стратегии подписи.
- Certificate Transparency · SCT — термины глоссария.
Граница публикации
Заголовок раздела «Граница публикации»Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов вне области рассмотрения.