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

Подписание PDF базовой подписью PAdES (страница перемещена)

Руководство по подписанию, ранее размещённое на этой странице, теперь заменено. Используйте вместо него канонический рецепт:

Подписание PDF с помощью PAdES B-B с последующим расширением до PAdES B-T

В более ранней версии этой страницы говорилось, что высокоуровневый путь Document::setSignature()save() не подключён и выбрасывает NotImplementedException. Это уже не так. Высокоуровневый путь теперь записывает реальную подпись.

Document::setSignature($cert, SignatureLevel::PAdES_B_B)->save() (а также эквивалентные output() / getPdfData()) записывает поле /Sig с /ByteRange и объект Cryptographic Message Syntax (CMS) SignedData, закодированный по правилам Distinguished Encoding Rules (DER), в запись Contents словаря подписи. Именно такую структуру ISO 32000-2 §12.8 определяет для SubFilter ETSI.CAdES.detached. Результат проверяем средствами CMS: его разбирает и проверяет стандартный верификатор CMS/PKCS#7 (Public-Key Cryptography Standards #7).

  • B-B — уровень Core — создаётся напрямую через этот путь.
  • B-T добавляет одну метку времени RFC 3161 signature-time-stamp, если в том же вызове передан TsaClient.
  • B-LT / B-LTA доступны через тот же высокоуровневый путь (setSignature($cert, SignatureLevel::PAdES_B_LTA, $tsaClient)->save()), если установлены пакеты Pro и Enterprise; без них вызов завершается безопасным отказом, а не записывает частичную долгосрочную ревизию. Попытка создать B-LT/B-LTA для зашифрованного документа также завершается безопасным отказом.

Низкоуровневый путь NextPDF\Security\Signature\DigitalSigner по-прежнему поддерживается. Канонический рецепт ниже подробно разбирает его от начала до конца. Высокоуровневый путь — это тонкая удобная обёртка над тем же движком подписания. Набор интеграционных тестов задействует оба пути и создаёт реальный объект CMS, пригодный для разбора.

Оговорка U-1 (область действия утверждения). “Проверяемый средствами CMS” означает, что созданный объект является корректно сформированным CMS SignedData согласно RFC 5652 и ISO 32000-2 §12.8. Это не является утверждением о соответствии базовому профилю ETSI EN 319 142-1 или о юридической силе. Часть этого стандарта, посвящённая базовым уровням, не входит в корпус для проверки; требование B-T к signature-time-stamp было проверено на соответствие ETSI EN 319 122-1 §5.3 с RFC 3161, RFC 5652, RFC 5816 и ISO 32000-2 §12.8. B-LT/B-LTA создают структуру долгосрочной проверки (словарь DSS плюс ревизия DocTimeStamp); они не заявляются как прошедшие проверку на соответствие профилю. Соответствие и юридическую силу определяет независимый валидатор.

Структурные факты об артефакте на диске, которые утверждались на старой странице, остаются верными. Заменяющий рецепт повторяет их с подтверждениями:

  • Значение подписи хранится в записи Contents словаря подписи (ISO 32000-2 §12.8.1).
  • Дайджест вычисляется по ByteRange и исключает само значение подписи (ISO 32000-2 §12.8.1).

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