Pro редакция
Безопасность
NextPDF Pro добавляет поверхность безопасности поверх NextPDF Core: маскирование содержимого во время генерации, обнаружение ПДн в текстовом слое, стратегии удалённого подписания и подписания через облачный KMS и многостороннее последовательное подписание. NextPDF Core формирует уровни PAdES B-B и B-T; Pro формирует те же уровни и добавляет эти процессы подписания поверх них (для B-T — подпись B-B плюс одна метка времени подписи по RFC 3161 на значении подписи). Эта страница на уровне поведения. Здесь указано, что делает каждая часть, чего она не делает и где начинается граница Enterprise.
Доступность и лицензирование
Заголовок раздела «Доступность и лицензирование»Эта возможность поставляется в NextPDF Pro (nextpdf/pro) и активируется конвертом лицензии уровня Pro. Развёртывание без этого права не загружает классы этой возможности. Сравните редакции и получите лицензию.
Core поставляет программный подписант CMS, клиент меток времени по RFC 3161, проверку пути по RFC 5280 и проверку отзыва по OCSP и CRL. Pro добавляет маскирование, обнаружение ПДн и процессы удалённого/облачного-KMS/последовательного подписания; эти процессы формируют те же уровни Core B-B и B-T через стек RFC 3161 из Core (для B-T — одна метка времени подписи на значении подписи). Развёртывание без активного права Pro не загружает эти классы; контракт подписания Core продолжает работать без изменений.
Установка
Заголовок раздела «Установка»composer require nextpdf/pro:^3Концептуальный обзор
Заголовок раздела «Концептуальный обзор»Движок маскирования применяет упорядоченный список правил к тексту до записи страницы. Каждое правило сопоставляется с регулярным выражением. Правило заменяет совпадение одним из трёх способов: заливка black-box, удаляющая текст из потока содержимого, фрагмент звёздочек того же числа символов или фиксированная метка вроде [REDACTED]. Движок удаляет нижележащие текстовые объекты для режима black-box, как проверено тестами; он не утверждает, что найдена каждая форма чувствительного содержимого. Обнаружение зависит от правил, которые вы настраиваете.
Поверхность ПДн — это инструмент обнаружения, а не гарантия редактирования. Она извлекает текстовый слой, затем применяет встроенные шаблоны для адресов электронной почты, телефонных номеров, номеров социального страхования США и номеров кредитных карт. Она возвращает маскированное представление текста и число совпадений. Она не переписывает отрисованные глифы в изображении страницы. Просканированная страница без текстового слоя не даёт совпадений. Считайте результат обнаружением по сопоставлению шаблонов для настроенных типов, а не полным удалением персональных данных.
Поверхность подписания добавляет удалённые и асинхронные процессы поверх подписанта Core. Сессия вычисляет дайджест документа, строит подписанные атрибуты CMS и передаёт байты подписанных атрибутов стратегии подписания. Стратегией может быть облачный KMS, отложенный внешний подписант или путь приёма, оборачивающий существующую подпись CAdES или XAdES. Затем сессия собирает CMS SignedData и хранит её в DER-кодировке в записи Contents словаря подписи — ISO 32000-2 §12.8.1. SignerInfo несёт подписанные атрибуты content-type и message-digest; процесс вычисления дайджеста сообщения — RFC 5652 §5.4. Проверяющая сторона не должна полагаться на дайджесты, вычисленные отправителем; она независимо пересчитывает дайджест содержимого и сравнивает его с атрибутом message-digest, и сравнение должно совпасть, чтобы подпись была действительной — процесс проверки подписи RFC 5652 §5.6.
NextPDF Core формирует уровни PAdES B-B и B-T; NextPDF Pro формирует те же уровни и добавляет свои процессы подписания поверх них. Для B-B сессия собирает CMS SignedData с набором подписанных атрибутов B-B и не применяет метку времени. Для B-T сессия добавляет ровно одну метку времени подписи signature-time-stamp по RFC 3161 как неподписанный атрибут CMS на значении подписи: signature-time-stamp — это неподписанный атрибут, несущий один токен метки времени, вычисленный на значении цифровой подписи для подписанта — ETSI EN 319 122-1 §5.3, а его MessageImprint — это хеш значения поля подписи SignerInfo, идентифицируемый по OID id-aa-timeStampToken — RFC 3161 Appendix A. genTime метки времени — это момент UTC создания токена — RFC 3161 §2.4.2. Поскольку метка времени — неподписанный атрибут, подписанный дайджест B-B, значение подписи SignerInfo и /ByteRange PDF не меняются; растёт только CMS. Токен RFC 3161 получается у настроенного поставщика меток времени (клиент RFC 3161 из Core по умолчанию или поставщик, заданный вызывающей стороной); B-T использует отпечаток сообщения SHA-256 на пути поставщика по умолчанию. NextPDF Pro реализует поддержку подписания PAdES B-T согласно ETSI EN 319 122-1 §5.3, RFC 3161, RFC 5652 и RFC 5816; это проверено на фикстурах. NextPDF Pro не утверждает независимой сертификации ETSI EN 319 142-1 и не утверждает правовую действительность документа. B-LT и B-LTA добавляют Document Security Store и метки времени документа для долгосрочной архивной проверки — ETSI EN 319 142-2 §5.5; эти уровни — возможность Enterprise (nextpdf/enterprise) и не формируются Pro. См. Граница Enterprise ниже.
Почему это устроено именно так
Заголовок раздела «Почему это устроено именно так»Поверхность подписания передаёт байты подписанных атрибутов в SigningStrategy, а не держит закрытый ключ. Это одно решение — несущее. Облачный KMS, отложенный внешний подписант или путь приёма CAdES/XAdES — все удовлетворяют одному контракту, поэтому вызывающий код остаётся идентичным, а ключевой материал никогда не попадает в NextPDF. Разделение сессии на RemoteSigningSession::prepare() и RemoteSigningSession::complete() позволяет подписи возвращаться асинхронно, потому что дайджест фиксируется до того, как дело дойдёт до ключа. Метка времени присоединяется как неподписанный атрибут CMS, поэтому B-T остаётся аддитивным: подписанный дайджест B-B, значение подписи SignerInfo и /ByteRange не затрагиваются. Каждый шов работает в режиме fail-closed, поскольку путь подписания, который молча деградирует, хуже того, который останавливается. Предыстория проектирования: Подписание в масштабе, без компромиссов.
Поверхность API
Заголовок раздела «Поверхность API»| Тип | Вид | Роль | Стабильность | С версии |
|---|---|---|---|---|
RemoteSigningSession | class | Двухфазная сессия удалённого или асинхронного подписания | stable | 1.9.0 |
RemoteSigningConfig | class | Неизменяемая конфигурация сессии, включая уровень PAdES | stable | 1.9.0 |
SequentialSigner | class | Многостороннее последовательное подписание с поддержкой DocMDP | stable | 1.9.0 |
SigningStrategy | interface | Контракт механизма подписания, вызываемый сессией | stable | 1.9.0 |
PadesWrapper | class | Оборачивает существующую подпись CAdES или XAdES для встраивания PAdES | stable | 1.9.0 |
KmsSignerInterface | interface (SPI) | Контракт стороннего драйвера HSM и KMS | stable | 2.1.0 |
GenerationTimeMasker | class | Маскирование по правилам, применяемое до записи страницы | stable | 1.9.0 |
MaskingConfig / MaskingRule / MaskingMode | types | Конфигурация маскирования, правило и режим замены | stable | 1.9.0 |
RemoteSigningConfig несёт поле уровня PAdES, перечисление которого — это SignatureLevel из Core. Путь подписания Pro формирует базовый уровень B-B и уровень B-T: настройте RemoteSigningConfig::default()->withLevel(SignatureLevel::PAdES_B_T) (или используйте SequentialSigner::withTimestamping()) и предоставьте поставщика меток времени, и сессия добавит неподписанный атрибут метки времени подписи по RFC 3161. Зарезервированное пространство /Contents для B-T увеличивается автоматически, чтобы токен поместился; недостаточно большое настроенное пространство проваливается закрыто с типизированной ошибкой конфигурации, а не усекается. Уровень выше B-T, несомый в конфигурации (B-LT или B-LTA), — это значение с упреждающим объявлением, по которому Pro не действует; этот долгосрочный формирователь разрешается во время выполнения через контракт Core и поставляется в пакете nextpdf/enterprise.
Пример кода — быстрый старт
Заголовок раздела «Пример кода — быстрый старт»<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\RemoteSigningSession;use NextPDF\Pro\Security\Signing\SigningStrategy;
/** * Produce a signed PDF using any signing strategy. * * @param string $pdfWithPlaceholder PDF bytes with a signature placeholder. * @param SigningStrategy $strategy A cloud-KMS, deferred, or ingest strategy. * * @return string The signed PDF bytes. */function signWithStrategy(string $pdfWithPlaceholder, SigningStrategy $strategy): string{ $session = RemoteSigningSession::create($pdfWithPlaceholder);
$session->prepare( certDer: $strategy->getCertificateDer(), chainDer: $strategy->getCertificateChainDer(), algorithmOid: $strategy->getSignatureAlgorithmOid(), digestAlgorithm: $strategy->getDigestAlgorithm(), contentsHexStart: 0, contentsHexEnd: 0, );
return $session->complete($strategy);}Вызывающая сторона зависит от контракта SigningStrategy. Стратегия облачного KMS и стратегия приёма CAdES обе удовлетворяют ему, поэтому этот код не меняется между стратегиями.
Пример кода — продакшн
Заголовок раздела «Пример кода — продакшн»<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\SequentialSigner;use NextPDF\Pro\Security\Signing\SigningStrategy;use Psr\Log\LoggerInterface;
final readonly class ApprovalWorkflow{ public function __construct(private LoggerInterface $logger) {}
/** * Sign a PDF with two parties in sequence. * * @param string $pdfData The PDF bytes to sign. * @param SigningStrategy $approver The first-party strategy. * @param SigningStrategy $reviewer The second-party strategy. * * @return string The signed PDF bytes. */ public function run(string $pdfData, SigningStrategy $approver, SigningStrategy $reviewer): string { try { $result = SequentialSigner::create($pdfData) ->addSigner($approver, 'Approver', reason: 'Approved') ->addSigner($reviewer, 'Reviewer', reason: 'Reviewed') ->sign();
$this->logger->info('Sequential signing complete', [ 'signatures' => $result->signatureCount, ]);
return $result->pdfData; } catch (\Throwable $e) { $this->logger->error('Sequential signing failed', ['error' => $e->getMessage()]);
throw $e; } }}Каждый подписант — это отдельная инкрементальная ревизия. Блок catch журналирует и повторно бросает исключение; он не проглатывает сбой, что сохраняет путь подписания в режиме fail-closed.
Граничные случаи и подводные камни
Заголовок раздела «Граничные случаи и подводные камни»- Сформированная подпись — это не проверенная подпись. Проверка пути выполняется у проверяющей стороны с её якорями доверия — RFC 5280 §6.1. Сторона, формирующая подпись, не может утверждать результат.
- Обнаружение маскирования зависит от настроенных правил. Набор правил, который не совпадает со значением, не маскирует его. Движок не утверждает, что всё чувствительное содержимое найдено.
- Обнаружение ПДн работает только по текстовому слою. Просканированная страница без текстового слоя не даёт совпадений. Инструмент не переписывает отрисованные глифы страницы.
- Структура CMS должна помещаться в зарезервированное пространство
Contents. SignedData B-B с полной цепочкой сертификатов имеет размер; соответственно размеряйте зарезервированное пространство, иначе сессия возбудит ошибку переполнения. - Стратегия облачного KMS зависит от сетевой доступности и доступности поставщика. Сетевая ошибка или ошибка поставщика возбуждает типизированное исключение; сессия не формирует молча неподписанный документ.
- OCSP
unknown— это неgood. Считайтеunknownотсутствием определённости — RFC 6960 §2.2.
Производительность
Заголовок раздела «Производительность»Программная подпись — это единичные миллисекунды. Подпись через облачный KMS добавляет один сетевой обход до поставщика. Подпись B-T добавляет один обход до настроенного поставщика меток времени поверх операции подписания. Бюджет в 1500 мс по времени покрывает одну подпись B-B с удалённым поставщиком на разогретом соединении. Стоимость маскирования масштабируется с числом правил и длиной текста. Профиль воспроизводимости — structural: подписанные атрибуты B-B встраивают момент подписания, а подпись B-T дополнительно встраивает токен метки времени, поэтому два прогона различаются в байтах времени подписания и метки времени, тогда как подписанная структура идентична.
Замечания по безопасности
Заголовок раздела «Замечания по безопасности»Это криптографическая граница, поэтому модель угроз задана явно. Диапазон байтов вычисляется движком и никогда не принимается от вызывающей стороны. Путь подписания работает в режиме fail-closed: сбой примитива или нехватка возможности возбуждает типизированное исключение и никогда молча не понижается до более слабого алгоритма. Стратегия облачного KMS — это точка интеграции, а не хранилище ключей. Защита ключа зависит от обращения с ключами, настроенного KMS и развёртывания; NextPDF Pro не держит закрытый ключ для стратегии KMS. Pro работает в FIPS-совместимом режиме при настройке против KMS или HSM, валидированного по FIPS; NextPDF Pro сам по себе не является криптографическим модулем, валидированным по FIPS. Эта страница касается криптографического подписания; каждый нормативный источник пересказан, и ни один не воспроизводится.
Размещение данных и меры по защите ПДн
Заголовок раздела «Размещение данных и меры по защите ПДн»Поверхности маскирования и ПДн выполняются в процессе. Содержимое документа не покидает хост для маскирования или обнаружения ПДн. Стратегия облачного KMS отправляет поставщику для операции подписания дайджест подписанных атрибутов, а не сам документ. Обнаружение ПДн выполняется сопоставлением шаблонов для настроенных типов и удаляет нижележащие текстовые объекты для режима black-box, как проверено тестами; это не гарантия полного удаления персональных данных и не заявление о соответствии нормативным требованиям.
Безопасная телеметрия и очистка журналов
Заголовок раздела «Безопасная телеметрия и очистка журналов»Библиотека возбуждает типизированные исключения со структурными сообщениями. Она не пишет содержимое документа или обнаруженные значения ПДн в сообщения исключений или журналы. Развёртывание, ведущее журналы вокруг пути подписания, должно журналировать структурные поля, показанные в продакшен-примере, а не байты документа.
Поведение в режиме FIPS
Заголовок раздела «Поведение в режиме FIPS»Pro выбирает алгоритм из настроенного алгоритма подписи и стратегии. При настройке против KMS или HSM, валидированного по FIPS, криптографическая операция выполняется в этой валидированной границе. NextPDF Pro сам выполняет структурную сборку и вычисление дайджеста; он не является модулем, валидированным по FIPS, и не делает заявления о сертификации FIPS.
Граница Enterprise
Заголовок раздела «Граница Enterprise»NextPDF Pro формирует базовый уровень B-B и уровень B-T. B-T добавляет одну метку времени подписи signature-time-stamp по RFC 3161 как неподписанный атрибут CMS на значении подписи, вычисленный на значении цифровой подписи для подписанта — ETSI EN 319 122-1 §5.3. NextPDF Pro реализует это согласно ETSI EN 319 122-1 §5.3, RFC 3161, RFC 5652 и RFC 5816; это проверено на фикстурах. NextPDF Pro не утверждает независимой сертификации ETSI EN 319 142-1 и не утверждает правовую действительность документа.
Уровни B-LT и B-LTA — это возможности Enterprise и не формируются Pro. B-LT и B-LTA добавляют Document Security Store и метки времени документа для долгосрочной архивной проверки — ETSI EN 319 142-2 §5.5. Конфигурация, запрашивающая Document Security Store или долгосрочный архивный цикл, разрешает этот формирователь во время выполнения через контракт Core; этот формирователь поставляется в пакете nextpdf/enterprise. В развёртывании только с Pro запрос B-LT или B-LTA проваливается закрыто с сообщением, называющим отсутствующий компонент Enterprise. Pro не формирует ни Document Security Store, ни словаря VRI, ни метки времени документа, ни архивного цикла и не делает заявления о долгосрочной проверке (LTV). Аппаратное хранение ключей через PKCS#11 и профиль криптополитики FIPS 140-3 также являются возможностями Enterprise.
| Уровень PAdES | Добавляет | Редакция-формирователь |
|---|---|---|
| B-B | Подпись CMS с подписанными атрибутами | Core, Pro, Enterprise |
| B-T | Один неподписанный атрибут signature-time-stamp по RFC 3161 на значении подписи | Core, Pro, Enterprise |
| B-LT | Document Security Store с материалом проверки | Enterprise (nextpdf/enterprise) |
| B-LTA | Метки времени документа для архивной действительности | Enterprise (nextpdf/enterprise) |
Контракт поведения
Заголовок раздела «Контракт поведения»- Маскирование применяет настроенные правила до записи страницы и удаляет нижележащие текстовые объекты для режима black-box, как проверено тестами.
- Обнаружение ПДн извлекает текстовый слой, применяет настроенные шаблоны и возвращает маскированное представление и число совпадений. Оно не переписывает отрисованные глифы.
- Удалённое подписание двухфазное: prepare вычисляет дайджест и строит подписанные атрибуты; complete собирает CMS и встраивает её.
- Pro формирует базовый уровень B-B и уровень B-T. Для B-T сессия добавляет одну метку времени подписи
signature-time-stampпо RFC 3161 как неподписанный атрибут CMS на значении подписи; подписанный дайджест B-B и/ByteRangeне меняются. Запрос B-T без поставщика меток времени или с недостаточно большим настроенным пространствомContentsпроваливается закрыто с типизированной ошибкой конфигурации. Запрос B-LT или B-LTA без пакета Enterprise проваливается закрыто с названной ошибкой. - Стратегия облачного KMS получает дайджест подписанных атрибутов, а не сам документ, и возвращает сырые байты подписи.
Соответствие
Заголовок раздела «Соответствие»| Утверждение | Стандарт | Пункт |
|---|---|---|
Подпись CMS хранится в DER-кодировке в записи Contents словаря подписи. | ISO 32000-2 | §12.8.1 |
| Процесс вычисления дайджеста сообщения; подписанные атрибуты несут content-type и message-digest. | RFC 5652 | §5.4 |
| Проверяющая сторона не должна полагаться на дайджесты, вычисленные отправителем; она независимо пересчитывает и сравнивает (процесс проверки подписи). | RFC 5652 | §5.6 |
| signature-time-stamp PAdES B-T — это неподписанный атрибут, несущий один токен метки времени, вычисленный на значении цифровой подписи для подписанта (Pro формирует B-T). | ETSI EN 319 122-1 | §5.3 |
MessageImprint токена signature-time-stamp id-aa-timeStampToken — это хеш значения поля подписи SignerInfo. | RFC 3161 | Appendix A |
На стороне проверки NextPDF привязывает MessageImprint метки времени подписи к значению подписи SignerInfo и проваливается закрыто при несоответствии, отсутствующем/дублированном токене или отпечатке SHA-1 (строгая проверка, а не сертификация). | RFC 3161 | Appendix A |
| Токен метки времени B-T несёт genTime в UTC — момент создания токена. | RFC 3161 | §2.4.2 |
| Проверка пути сертификации проверяет базовые ограничения и входные данные пути к якорю доверия. | RFC 5280 | §6.1 |
| OCSP сообщает certStatus как good, revoked или unknown. | RFC 6960 | §2.2 |
| B-LT и B-LTA добавляют Document Security Store и метки времени документа для долгосрочной проверки (граница Enterprise). | ETSI EN 319 142-2 | §5.5 |
Все пункты пересказаны. NextPDF не воспроизводит нормативный текст. Авторитетные формулировки см. в опубликованных стандартах. NextPDF Pro реализует поддержку подписания PAdES B-T согласно ETSI EN 319 122-1 §5.3 (signature-time-stamp), RFC 3161, RFC 5652 и RFC 5816, и это проверено на фикстурах. ETSI EN 319 142-1 (часть о базовых уровнях PAdES) находится за пределами цитируемого набора свидетельств; поэтому NextPDF Pro не утверждает независимой сертификации, соответствия или комплаенса ETSI EN 319 142-1 и не утверждает правовую действительность документа. Эта страница указывает сформированную структуру, стандарты, которые реализует поддержка B-T, и границу Enterprise B-LT/B-LTA, а не сертифицированный уровень соответствия.
Граница публикации
Заголовок раздела «Граница публикации»Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов находятся за пределами области.
См. также
Заголовок раздела «См. также»- Безопасность — глубокий справочник — глубокий справочник по этой поверхности безопасности Pro.
- Подписание в Core — подписант CMS, метка времени RFC 3161, проверка пути RFC 5280, OCSP и CRL.
- Карта пунктов PAdES — B-B, B-T, B-LT, B-LTA по редакциям.
- NextPDF Pro — полная поверхность возможностей Pro.
- Безопасность Core — шифрование и более широкая поверхность подписи.
- CMS · PAdES · Метка времени RFC 3161 · KMS · DSS — термины глоссария.