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

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, поскольку путь подписания, который молча деградирует, хуже того, который останавливается. Предыстория проектирования: Подписание в масштабе, без компромиссов.

ТипВидРольСтабильностьС версии
RemoteSigningSessionclassДвухфазная сессия удалённого или асинхронного подписанияstable1.9.0
RemoteSigningConfigclassНеизменяемая конфигурация сессии, включая уровень PAdESstable1.9.0
SequentialSignerclassМногостороннее последовательное подписание с поддержкой DocMDPstable1.9.0
SigningStrategyinterfaceКонтракт механизма подписания, вызываемый сессиейstable1.9.0
PadesWrapperclassОборачивает существующую подпись CAdES или XAdES для встраивания PAdESstable1.9.0
KmsSignerInterfaceinterface (SPI)Контракт стороннего драйвера HSM и KMSstable2.1.0
GenerationTimeMaskerclassМаскирование по правилам, применяемое до записи страницыstable1.9.0
MaskingConfig / MaskingRule / MaskingModetypesКонфигурация маскирования, правило и режим заменыstable1.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.

Sign with a cloud-KMS strategy
<?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 обе удовлетворяют ему, поэтому этот код не меняется между стратегиями.

Multi-party sequential signing with audit logging
<?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, как проверено тестами; это не гарантия полного удаления персональных данных и не заявление о соответствии нормативным требованиям.

Безопасная телеметрия и очистка журналов

Заголовок раздела «Безопасная телеметрия и очистка журналов»

Библиотека возбуждает типизированные исключения со структурными сообщениями. Она не пишет содержимое документа или обнаруженные значения ПДн в сообщения исключений или журналы. Развёртывание, ведущее журналы вокруг пути подписания, должно журналировать структурные поля, показанные в продакшен-примере, а не байты документа.

Pro выбирает алгоритм из настроенного алгоритма подписи и стратегии. При настройке против KMS или HSM, валидированного по FIPS, криптографическая операция выполняется в этой валидированной границе. NextPDF Pro сам выполняет структурную сборку и вычисление дайджеста; он не является модулем, валидированным по FIPS, и не делает заявления о сертификации FIPS.

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-LTDocument 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 3161Appendix A
На стороне проверки NextPDF привязывает MessageImprint метки времени подписи к значению подписи SignerInfo и проваливается закрыто при несоответствии, отсутствующем/дублированном токене или отпечатке SHA-1 (строгая проверка, а не сертификация).RFC 3161Appendix 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 и префиксы тикетов находятся за пределами области.