В некоторых ситуациях Adobe называет сертификат подписанта недействительным, хотя, по-видимому, он действителен;в частности, в данном случае:
- Использование ключа или значения использования расширенного ключа не подходят
- В подписи PAdES отсутствует атрибут подписи ESS-сертификата-v2
Использование ключа или Значения расширенного использования ключа не подходят
Это основано на информации, которую ОП впервые опубликовал как ответ
Я попробовал приведенный ниже код, но в PDF-файле написано, что подпись недействительна.Можете ли вы проверить код,
[...]
Я приложил PDF. PDF-файл создан
Действительно, Adobe Reader сообщает, что подпись недействительна, но посмотрите более внимательно:
В нем говорится «Документ не был изменен с момента применения этой подписи» - это означает, что подпись является математически правильной!
Проблема заключается в том, что «Подписывающее лицо»«сертификат недействителен», и причину этого можно увидеть при копании в диалоговых окнах свойств подписи:
Таким образом, проблема заключается в том, что ваш подписантсертификат Недействительно для использования .
Это связано с выделенным атрибутом, в то время как использование ключа Цифровая подпись в порядке, «Использование расширенного ключа» 1.3.6.1.5.5.8.2.2 (OID для IPSEC Protection ) - это не *
В соответствии с Руководством по цифровой подписи Adobe для ИТ ,Adobe Acrobat принимает только
Из-за его IPSEC Protection расширенного значения использования ключа, следовательно, ваш сертификат не считаетсядействительно для подписи документов PDF.
Это, вероятно, проблема только в устаревших сигнатурах ISO 32000-1, возможно, не в сигнатурах PAdES.
В подписи PAdES отсутствует подпись ESSАтрибут -certificate-v2
Это основано на информации, впервые опубликованной ОП как ответ
У меня естьсоздано 2 файла PDF, PDFA подписан с использованием дайджеста содержимого PDF с кодом ниже,
[...]
PDFA
PDFB создается с тем же закрытым ключом исертификат, но вместо дайджеста я использую содержимое документа pdf напрямую, что дает мне действительный подписанный pdf, код PDFB ниже,
[...]
PDFB
Я думаю, что в подписывающей части PDFA чего-то не хватает, чего я не смог понять.
Здесь главное отличие состоит не в том, что вы сами явно вычисляете хеш или не позволяете вычислить его неявно, а главное в том, что подпись в PDFB включает атрибут ESS signature-certificate-v2, а сигнатура в PDFA - нет.Этот атрибут генерируется между
//PAdES - PDF Advanced Electronic Signature
и
//PAdES-end
Поскольку комментарии уже намекают, это необходимо только для подписей PAdES, а не для устаревших ISO 32000-1. Ответ, который OP взял из оригинального кода , касался создания устаревшей подписи ISO 32000-1 (и, следовательно, работает нормально), в то время как OP создает подпись PAdES.
Наличиеатрибут спецификации подписи ESS требуется спецификацией PAdES ETSI EN 319 142-1:
e) Генераторы должны использовать либо сертификат подписи, либо атрибут подписи-сертификата v2, в зависимости от хэш-функции, в соответствии с ETSI EN 319 122-1.
(ETSIEN 319 142-1, раздел 6.3 Базовые подписи PAdES)
Он ссылается на спецификацию CAdES ETSI EN 319 122-1, которая, в свою очередь, требует
h) Требование для SPO: ESS signing-certificate
.Атрибут ESS signing-certificate
должен использоваться, если используется алгоритм хеширования SHA-1.
i) Требование для SPO: ESS signing-certificate-v2
.Атрибут ESS signing-certificate-v2
должен использоваться, когда используются алгоритмы хэширования, отличные от SHA-1.
(ETSI EN 319 122-1, раздел 6.3 Требования к компонентам и услугам)