Подписание 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).
Эта страница не утверждает, что какая-либо полученная подпись имеет юридическую силу. Она зависит от сертификата, его корня доверия и политики верификатора. Всё это находится за пределами этой библиотеки.