Enterprise редакция
Подпись: PAdES B-LT / B-LTA, DSS, метки времени документа
NextPDF Enterprise добавляет к подписи Core на базе Cryptographic Message Syntax (CMS) модуль долгосрочного формирования: Document Security Store (DSS), сведения для проверки каждой подписи (VRI) и метки времени документа. Эти структуры переводят базовую подпись PDF Advanced Electronic Signatures (PAdES) с уровня B-B на B-LT, а затем на B-LTA. Эта страница описывает поведение. В ней указано, что записывает модуль формирования, какие решения он не принимает и где начинается граница Pro.
Доступность и лицензирование
Заголовок раздела «Доступность и лицензирование»Эта возможность поставляется в составе NextPDF Enterprise (nextpdf/enterprise) и активируется лицензионным конвертом уровня Enterprise. Развёртывание без этого права доступа не загружает классы этой возможности. Сравните редакции и получите лицензию.
NextPDF Core формирует базовые уровни PAdES B-B и B-T: Core поставляет программный подписывающий модуль CMS и путь меток времени по RFC 3161, поэтому подпись B-T (с меткой времени) — это возможность Core и не требует Enterprise. NextPDF Pro также формирует B-B и B-T: Pro компонует стек RFC 3161 из Core, чтобы добавить неподписанный атрибут signature-time-stamp к значению подписи (PadesBtTimestamper, проверено фикстурами). Уровни B-LT и B-LTA — модуль формирования DSS, VRI и меток времени документа — являются возможностью Enterprise и не формируются Core или Pro. При развёртывании только с Pro запрос B-LT или B-LTA завершается защищённым отказом с сообщением, называющим отсутствующий компонент Enterprise, потому что SignatureLevel::isAvailableInEnvironment() возвращает false, когда модуль долгосрочного формирования Enterprise отсутствует.
| Уровень PAdES | Добавляет | Редакция модуля формирования |
|---|---|---|
| B-B | Подпись CMS с подписанными атрибутами | Core, Pro, Enterprise |
| B-T | RFC 3161 signature-time-stamp на значение подписи (структурный; не квалифицированный по eIDAS) | Core, Pro, Enterprise |
| B-LT | Document Security Store с данными для проверки | Только Enterprise (nextpdf/enterprise) |
| B-LTA | Метки времени документа для архивной действительности | Только Enterprise (nextpdf/enterprise) |
Это каноническая матрица «уровень→редакция»: B-B — базовый уровень, формируемый каждой редакцией; B-T (с меткой времени) также формируется Core и Pro (Pro компонует стек RFC 3161 из Core); B-LT и B-LTA доступны только в Enterprise. Модуль формирования B-T является структурным; это не сертифицированное заявление о соответствии ETSI EN 319 142-1 и не заявление о квалифицированности по eIDAS. Это соответствует опубликованной таблице редакций на странице безопасности Pro.
Установка
Заголовок раздела «Установка»composer require nextpdf/enterprisenextpdf/enterprise зависит от nextpdf/core и nextpdf/pro. Настройте доступ к пакету в Private Packagist с учётными данными лицензии NextPDF.
Концептуальный обзор
Заголовок раздела «Концептуальный обзор»У базовой подписи PAdES четыре уровня. Каждый уровень добавляет данные к предыдущему. B-B — это подпись CMS с подписанными атрибутами. B-T добавляет доверенную метку времени по RFC 3161 для значения подписи. B-LT добавляет DSS с сертификатами, ответами Online Certificate Status Protocol (OCSP) и списками отозванных сертификатов (CRL), которые нужны проверяющей стороне после истечения срока действия сертификата подписи. B-LTA добавляет метку времени документа поверх всего состояния документа, включая DSS, благодаря чему данные для проверки остаются привязанными ко времени.
Core формирует CMS SignedData и сохраняет его в DER-кодировке в записи Contents словаря подписи — ISO 32000-2 §12.8.1. Для долгосрочной проверки используются два типа словарей: document security store и словарь метки времени документа — ISO 32000-2 §12.8. Модуль формирования Enterprise записывает DSS с данными о сертификатах, OCSP и CRL — ISO 32000-2 §12.8.4.3, а для B-LTA — словарь метки времени документа — ISO 32000-2 §12.8.5. ETSI EN 319 142-2 описывает ту же долгосрочную структуру: записи DSS плюс метки времени документа для долгосрочных подписей — §5.5, которые поддерживает обработчик подписи — §6.3.3.3.
Модуль формирования собирает данные об отзыве для каждого сертификата цепочки. Сначала он обращается к ответчику OCSP; ответ OCSP сообщает good, revoked или unknown — RFC 6960 §2.2, а поля thisUpdate и nextUpdate ограничивают свежесть статуса — RFC 6960 §4.2. Если OCSP недоступен, модуль переходит к CRL. Он проходит цепочку от подписавшего к якорю доверия, используя входные данные для проверки пути — RFC 5280 §6.1.
Метка времени документа B-LTA — это обмен по RFC 3161 со службой меток времени (TSA). Запрос возвращает значение Time Stamp Information (TSTInfo) — RFC 3161 §2.4.1, где genTime — это момент во Всемирном координированном времени (UTC), когда был создан токен — RFC 3161 §2.4.2. Токен встраивается в словарь /DocTimeStamp с /SubFilter /ETSI.RFC3161 так, чтобы он охватывал весь файл.
Проверяющая сторона решает, проходит ли сформированная подпись проверку, используя настроенные якоря доверия и политику отзыва. Модуль формирования только встраивает данные; он не объявляет результат доверенным. Эта граница ниже повторяется в местах, где она важна.
Порядок имеет значение: DSS должен быть записан до метки времени документа B-LTA, потому что метка времени должна охватывать состояние документа, уже содержащее данные для проверки. Схема ниже показывает эту последовательность действий модуля формирования.
Почему это устроено именно так
Заголовок раздела «Почему это устроено именно так»У долгосрочной действительности есть одно жёсткое правило порядка: метка времени документа должна охватывать данные для проверки. Поэтому DSS всегда записывается первым, а метка времени B-LTA берётся поверх состояния файла, которое его уже включает. Обратите этот порядок — и метка времени не защитит ничего из того, что проверяющая сторона прочитает годы спустя: сертификаты, OCSP и CRL окажутся вне её охвата. Поэтому модуль формирования встраивает данные и привязывает их ко времени, но не доходит до утверждения доверенного результата; это решение принадлежит проверяющей стороне и её якорям доверия. Защищённый отказ при отсутствии данных об отзыве означает, что документ, заявляющий долгосрочный уровень, никогда не выпускается без доказательств, которые подтверждают это заявление. Итог — подпись, которую третья сторона может перепроверить спустя долгое время после истечения срока действия сертификата подписи, не обращаясь к исходным ответчикам.
Предыстория проектирования: Долгосрочная проверка.
Поверхность API
Заголовок раздела «Поверхность API»Вы используете модуль долгосрочного формирования Enterprise через контракт Core. Рабочий код зависит от контракта, а не от конкретного типа реализации Enterprise.
| Тип | Вид | Роль | Стабильность | Начиная с |
|---|---|---|---|---|
SignerInterface | интерфейс (NextPDF\Contracts) | Базовый контракт подписания для вызывающего кода | стабильный | 1.0.0 |
SignatureLevel | перечисление (NextPDF\Security\Signature) | Селектор уровня PAdES: B-B, B-T, B-LT, B-LTA | стабильный | 1.0.0 |
LtvManagerInterface | интерфейс (NextPDF\Contracts) | Контракт модуля долгосрочной проверки, разрешаемый во время выполнения | стабильный | 1.0.0 |
TsaClientInterface | интерфейс | Клиент TSA по RFC 3161, к которому модуль формирования обращается за метками времени документа | стабильный | 1.0.0 |
SignatureLevel::requiresDss() возвращает true для B-LT и B-LTA; SignatureLevel::requiresDocumentTimestamp() возвращает true только для B-LTA. Метод Core SignatureLevel::isAvailableInEnvironment() возвращает false для B-LT и B-LTA, когда модуль долгосрочного формирования Enterprise не установлен; тогда оркестратор Core завершает операцию защищённым отказом. Конкретные классы модуля формирования Enterprise являются внутренними и не входят в публичный API; опирайтесь на LtvManagerInterface и перечисление.
Пример кода — быстрый старт
Заголовок раздела «Пример кода — быстрый старт»<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Security\Signature\SignatureLevel;
/** * Select the PAdES level for a long-term signature. * * B-LT embeds a DSS. B-LTA also adds a document timestamp. * Both require the nextpdf/enterprise long-term producer at runtime. * * @return SignatureLevel The requested PAdES baseline level. */function longTermLevel(): SignatureLevel{ return SignatureLevel::PAdES_B_LTA;}Конфигурация подписания содержит уровень. Во время выполнения оркестратор Core разрешает модуль долгосрочного формирования через LtvManagerInterface, поэтому код приложения не ссылается на тип Enterprise.
Пример кода — рабочая среда
Заголовок раздела «Пример кода — рабочая среда»<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Exception\NextPdfException;use NextPDF\Security\Signature\CertificateInfo;use NextPDF\Security\Signature\SignatureLevel;use NextPDF\Security\Timestamp\TsaClient;use Psr\Http\Client\ClientInterface;use Psr\Log\LoggerInterface;
/** * Produce a PAdES B-LTA signature through the high-level Document seam, which * drives the Core PadesOrchestrator and the Enterprise long-term producer in the * load-bearing order: sign, write the DSS (LtvManager::enableLtv), then add the * /DocTimeStamp over the state that already includes it (::addDocumentTimestamp). */final readonly class LongTermSigner{ public function __construct( private TsaClient $tsa, // RFC 3161 TSA client (required for B-T and above). private ClientInterface $http, // PSR-18 client that fetches OCSP/CRL for the DSS. private LoggerInterface $logger, ) {}
/** * Sign at B-LTA and return the long-term-signed PDF bytes; requesting B-LTA * without the nextpdf/enterprise producer fails closed rather than downgrading. * * @throws NextPdfException Fail-closed: enterprise producer absent * (SignatureLevelUnreachableException), no HTTP client * (SignatureException), or missing material (LtvException). */ public function sign(CertificateInfo $certInfo): string { try { $document = Document::createStandalone(); $document->addPage(); $document->setSignature($certInfo, SignatureLevel::PAdES_B_LTA, $this->tsa, $this->http);
return $document->getPdfData(); } catch (NextPdfException $e) { $this->logger->error('long-term B-LTA signing failed', ['reason' => $e->getMessage()]); throw $e; } }}DSS должен быть записан до метки времени документа. Метка времени B-LTA охватывает весь файл, включая DSS, благодаря чему сами данные для проверки привязываются ко времени.
Граничные случаи и подводные камни
Заголовок раздела «Граничные случаи и подводные камни»- При отсутствии данных об отзыве по умолчанию срабатывает защищённый отказ. Если режим принудительной проверки не задан, модуль формирования считает отсутствие ответа OCSP и CRL для любого некорневого сертификата ошибкой, а не предупреждением. Это не даёт записать документ, заявляющий долгосрочный уровень, без данных об отзыве в DSS. Разрешающий сценарий включается явно и ограничивается предупреждениями.
- B-LTA требует TSA. Метка времени документа — это полный цикл обмена по RFC 3161. Если клиент TSA не настроен, шаг B-LTA завершается ошибкой; B-LT молча не формируется.
- Порядок имеет значение. Добавляйте метку времени документа только после записи DSS. Метка времени, взятая до DSS, не охватывает данные для проверки.
- Запуск в изолированной сети. При строгой офлайн-политике сети модуль формирования не выполняет запросы OCSP/CRL и не обращается к TSA; он использует только данные, уже встроенные в DSS. B-LTA, для которого нужен свежий токен TSA, недоступен в строгом офлайн-режиме.
- VRI включается явно. По умолчанию VRI для каждой подписи не записывается. Некоторые валидаторы лучше отображают долгосрочный статус при наличии VRI; включайте его, если он нужен целевой проверяющей стороне.
Производительность
Заголовок раздела «Производительность»Затраты на сборку DSS растут с длиной цепочки и числом запрошенных ответов об отзыве. Каждый запрос OCSP или CRL — это один сетевой цикл обмена; заранее собранные или кешированные данные устраняют эти циклы. Запуск B-LTA добавляет один цикл обмена с TSA для метки времени документа. Бюджет времени в 1500 мс покрывает одну долгосрочную подпись при прогретых соединениях OCSP/CRL и TSA; холодные соединения или медленные ответчики определяют итоговое время. Профиль воспроизводимости — structural: метки времени встраивают моменты подписания и проставления штампа, поэтому два запуска различаются в этих байтах, тогда как структура документа идентична.
Замечания по безопасности
Заголовок раздела «Замечания по безопасности»- Доверие — это решение проверяющей стороны. Модуль формирования встраивает сертификаты, OCSP и CRL. Пройдёт ли подпись проверку, зависит от проверяющей стороны, её якорей доверия и политики свежести отзыва. NextPDF не поставляет встроенного списка доверия.
- Свежесть данных об отзыве ограничена во времени. Поля OCSP
thisUpdate/nextUpdateи сроки действия CRL ограничивают, как долго встроенные данные остаются пригодными. Архивный цикл повторно проставляет штамп до истечения срока действия сертификата метки времени; вы отвечаете за его выполнение по расписанию. - Защищённый отказ по умолчанию. По умолчанию строгий режим принудительной проверки отзыва не даёт заявить долгосрочный уровень без данных, которые его подтверждают.
- См. раздел о модели угроз Enterprise и Архив: DSS, VRI, состояние LTV.
Размещение данных и меры по защите ПДн
Заголовок раздела «Размещение данных и меры по защите ПДн»При получении OCSP и CRL модуль обращается к ответчикам, указанным в каждом сертификате; эти конечные точки и TSA видят метаданные запроса. Если у развёртывания есть ограничения по размещению данных, заранее соберите данные об отзыве и работайте по строгой офлайн-политике, чтобы во время подписания не было обращений ни к ответчикам, ни к TSA. Сертификаты содержат идентификационные данные субъекта. Модуль формирования встраивает сертификаты, необходимые для проверки, и не добавляет идентификационных данных сверх цепочки; он не удаляет поля субъекта из предоставленного вами сертификата.
Безопасная телеметрия и очистка журналов
Заголовок раздела «Безопасная телеметрия и очистка журналов»Диагностика модуля формирования сообщает уровень, позицию в цепочке и причину отсутствия данных. Она не записывает в журнал закрытые ключи или полные тела сертификатов. При подключении логгера PSR-3 держите диагностические журналы потоков подписания на уровне подробности для непроизводственной среды и очищайте URL ответчиков, если они раскрывают внутреннюю инфраструктуру. Относитесь к встроенным байтам OCSP/CRL как к содержимому документа, а не журнала.
Поведение в режиме FIPS
Заголовок раздела «Поведение в режиме FIPS»Профиль криптографической политики Federal Information Processing Standards (FIPS) 140-3 — это возможность Enterprise, описанная вместе с модулем безопасности. Модуль долгосрочного формирования не добавляет собственных криптографических примитивов, кроме дайджеста SHA-256, используемого для метки времени документа и обмена по RFC 3161; примитив подписания относится к подписывающему модулю Core. Когда профиль FIPS активен, формируются те же структуры DSS и метки времени документа; ограничение применяется к нижележащим алгоритмам подписи и дайджеста, а не к структуре DSS.
Модель угроз
Заголовок раздела «Модель угроз»| Актив | Противник | Риск | Мера противодействия |
|---|---|---|---|
| Данные об отзыве в DSS | Принятие устаревших данных | Проверяющая сторона доверяет просроченным данным об отзыве | Поля свежести OCSP/CRL ограничивают срок действия; архивный цикл повторно проставляет штамп до истечения срока |
| Метка времени документа B-LTA | Компрометация TSA или недоступность TSA | Нет надёжного якоря времени | TSA выбирает вызывающий код; B-LTA завершается защищённым отказом, когда TSA не настроен |
| Заявление о долгосрочности | Молчаливое отсутствие данных | PDF с заявленной «долгосрочностью», но без данных об отзыве | Защищённый отказ по умолчанию вызывает ошибку вместо предупреждения |
| Проверка подписи | Неправильно настроенное доверие проверяющей стороны | Видимая действительность, которую проверяющая сторона не должна утверждать | Модуль формирования указывает, что только встраивает данные; решение о доверии принимает проверяющая сторона |
Соответствие
Заголовок раздела «Соответствие»| Утверждение | Стандарт | Пункт |
|---|---|---|
Значение подписи (или токен метки времени) хранится в DER-кодировке в /Contents. | ISO 32000-2 | §12.8.1 |
| Долгосрочная проверка использует DSS и словарь метки времени документа. | ISO 32000-2 | §12.8 |
| DSS содержит сертификаты, ответы OCSP и CRL. | ISO 32000-2 | §12.8.4.3 |
| Метка времени документа использует словарь метки времени документа. | ISO 32000-2 | §12.8.5 |
| Записи DSS и метки времени документа поддерживают долгосрочные подписи. | ETSI EN 319 142-2 | §5.5 |
| Обработчик подписи поддерживает записи DSS и метки времени документа. | ETSI EN 319 142-2 | §6.3.3.3 |
| Токен метки времени несёт genTime в UTC — момент, когда он был создан. | RFC 3161 | §2.4.2 |
| OCSP сообщает good, revoked или unknown; свежесть ограничена thisUpdate/nextUpdate. | RFC 6960 | §2.2, §4.2 |
Все пункты приведены в пересказе. NextPDF не воспроизводит нормативный текст; за авторитетной формулировкой обращайтесь к опубликованным стандартам. NextPDF не делает заявления о сертификации PAdES. Описанные здесь структуры согласованы с уровнями B-LT и B-LTA, как они определены в ETSI EN 319 142; результат тестирования на соответствие и сторонняя аттестация не заявляются. Часть базовых уровней ETSI EN 319 142-1 находится вне приведённого набора доказательств, поэтому эта страница описывает формируемую структуру и границу Pro/Enterprise, а не сертифицированный уровень соответствия. Приведённое свидетельство ETSI — EN 319 142-2; ссылки ISO и RFC подтверждают заявления о долгосрочности и метках времени, как в справочнике по подписанию Core.
Контракт поведения
Заголовок раздела «Контракт поведения»- И Core, и Pro формируют B-B и B-T (B-T добавляет RFC 3161 signature-time-stamp; Pro компонует стек RFC 3161 из Core). B-LT и B-LTA — это граница Enterprise; их запрос без
nextpdf/enterpriseзавершается защищённым отказом с именованной ошибкой. - Модуль формирования записывает DSS (B-LT) и метку времени документа поверх DSS (B-LTA). Он встраивает данные для проверки; он не утверждает доверенный результат проверки.
- Режим защищённого отказа, используемый по умолчанию для принудительной проверки отзыва, вызывает ошибку, когда данные об отзыве для некорневого сертификата отсутствуют, если вызывающий код не включил разрешающий сценарий.
- B-LTA требует настроенного TSA; при его отсутствии шаг B-LTA завершается ошибкой, а не понижением до B-LT.
Граница публикации
Заголовок раздела «Граница публикации»Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую поверхность публичного API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы заявок находятся вне рамок.
Резервный режим Core
Заголовок раздела «Резервный режим Core»При развёртывании только с Core программный подписывающий модуль формирует PAdES B-B и B-T с локальным ключом или ключом, переданным через контракт стратегии подписания Core. Core поставляет путь меток времени по RFC 3161, поэтому B-T достижим без какого-либо премиум-пакета. У Core нет модуля формирования DSS, VRI или меток времени документа; запрос B-LT или B-LTA завершается защищённым отказом с именованной ошибкой. См. Безопасность / Подписание (Core).
Резервный режим Pro
Заголовок раздела «Резервный режим Pro»При развёртывании только с Pro поддерживаемый путь подписания — это базовый уровень Pro B-B и уровень Pro B-T (Pro компонует стек RFC 3161 из Core, чтобы добавить неподписанный атрибут signature-time-stamp), плюс его стратегии подписания через удалённую и облачную службу управления ключами (KMS). Pro не формирует DSS, VRI или метку времени документа. Конфигурация, запрашивающая B-LT или B-LTA при развёртывании только с Pro, завершается защищённым отказом с сообщением, называющим отсутствующий компонент Enterprise. См. Безопасность Pro для обзора поверхности подписания Pro.
Замечание о границе Enterprise
Заголовок раздела «Замечание о границе Enterprise»Модуль формирования DSS, VRI и меток времени документа описан только на уровне поведения. Логика упорядочивания сборки DSS, внутренние детали формирования ключей VRI для каждой подписи и планирования архивного цикла находятся вне публичной поверхности и здесь не воспроизводятся.
Граница развёртывания
Заголовок раздела «Граница развёртывания»NextPDF Enterprise встраивает данные для проверки; он интегрируется с предоставленными вызывающим кодом ответчиками OCSP/CRL и TSA по RFC 3161. Он сам не эксплуатирует, не размещает и не гарантирует доступность этих ответчиков или TSA. Долгосрочная действительность зависит от ответчиков, TSA, расписания архивного цикла и оператора — а не только от NextPDF Enterprise. Оператор отвечает за выбор и доступность TSA, доступ к ответчикам отзыва или заранее собранные данные, политику сети и выполнение архивного цикла до истечения срока действия каждого сертификата метки времени.
Граница правового соответствия
Заголовок раздела «Граница правового соответствия»Эта страница касается криптографического подписания и долгосрочной проверки. Согласованность со структурами B-LT и B-LTA, определёнными в ETSI EN 319 142, — это структурное утверждение, а не юридическое заключение и не сертификация. NextPDF не делает заявления о сертификации PAdES. По вопросам ваших нормативных обязательств обращайтесь к консультантам по комплаенсу и праву.
См. также
Заголовок раздела «См. также»- Безопасность / Подписание (Core) — CMS, RFC 3161, проверка пути RFC 5280, OCSP/CRL.
- Безопасность Pro — базовый уровень B-B и граница Enterprise.
- Архив: DSS, VRI, состояние LTV — долгосрочное архивирование и состояние LTV.
- Проверка подписи — сторона проверки: криптографическая проверка CMS / меток времени, TSA на момент genTime и проверка архивной цепочки.
- Подпись (справочник Enterprise) — справочник API по DSS, VRI и меткам времени документа для этой возможности.
- Карта пунктов PAdES — B-B, B-T, B-LT, B-LTA по редакциям.
- PAdES · DSS · VRI · LTV — термины глоссария.