Является ли этот PDF цифровой подписью правильно? PHP / TCPDF - PullRequest
0 голосов
/ 06 июля 2018

Я обновляю проект для моей компании, и есть раздел, в котором нам нужно подписать PDF-файл нашим файлом сертификата. В этом случае я должен изменить скрипт, который подписывает этот pdf, используя обновленную библиотеку из PHP.

В старом коде мы использовали другой сценарий, чтобы это произошло, и нам пришлось использовать файл .p12 + строку. Используя этот старый скрипт, когда вы открываете созданный pdf в Acrobat Reader DC, мы получаем следующее изображение, на котором вы видите «Подписано, и все подписи действительны».

enter image description here

В новом скрипте я использую следующий пример:

https://tcpdf.org/examples/example_052/

Чтобы иметь возможность применить этот пример с моим сертификатом, мне пришлось преобразовать свой сертификат файла pfx (".p12") в 2 вида ".pem", которые выдают следующие строки команд nexts:

openssl pkcs12 -in myOldCertificate.p12 -clcerts -nokeys -out publicCert.pem -> спросил меня «Введите пароль для импорта»

openssl pkcs12 -in myOldCertificate.p12 -nocerts -out privateKey_cert.pem -> спросил меня «Введите пароль для импорта», а также «Введите пароль PEM»

Итак, наконец, я просто изменил строку 89 из загруженного примера 52.

// установить подпись документа

$ pdf-> setSignature ('file: ///var/www/html/publicCert.pem', 'file: ///var/www/html/privateKey_cert.pem', 'xxxxxx', '', 2, $ info); -> В 'xxxxx' я написал ту же строку, что и пароль для импорта, и, на всякий случай, также для парольной фразы PEM.

И когда я создаю PDF-файл с цифровой подписью и открываю его с помощью Acrobat Reader DC, вы можете увидеть следующее изображение:

enter image description here

Меня беспокоит то, что я вижу, что написано «Сертифицировано сертификацией моей компании», и кажется, что все в порядке, но зеленой галочки нет, и я не уверен, что она полностью действительна. Вы должны подумать, что мне понадобится самый безопасный способ проверить подлинность и целостность этого pdf.

1 Ответ

0 голосов
/ 06 июля 2018

Формат PDF поддерживает два типа пользовательских подписей:

  • утверждения подписей и
  • сертификационные подписи.

Сертификационные подписи помимо подписи документа также определяют, какие изменения в документе должны быть разрешены после подписания; подписи одобрения просто подписывают.

Обычно автор документа подписывает его, используя сертификационную подпись, чтобы указать, что он является автором документа и допускает только определенные дополнения к нему (например, заполнение формы). Сертифицированный таким образом документ затем направляется другим сторонам, которые (возможно, после заполнения формы) подписывают документ с помощью подписи для подтверждения того, что они утверждают содержание документа, включая его дополнения.

Ваш старый код применял подпись одобрения, в то время как ваш новый код применяет подпись сертификации, позволяющую «только заполнять формы, подписывать и добавлять страницы».

Относительно ваших забот

Меня беспокоит то, что я вижу, что написано «Сертифицировано сертификацией моей компании» и кажется, что все в порядке, но зеленой галочки нет, и я не уверен, что она полностью действительна.

Кроме различий, описанных выше, подпись сертификации так же действительна, как и подпись одобрения Для обзора значений значков строки состояния подписи посмотрите здесь:

Acrobat signature validation cheat sheet

(Этот шпаргалка предназначена для Adobe Acrobat и Reader 9; между тем цвет сертификационной ленты изменился с синего на черный, но его значение остается прежним)


Если вы строго хотите вернуться к подписи одобрения, попробуйте расширить строку

$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info);

в примере кода с другим параметром

$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info, 'A');

, что должно (на первый взгляд на источники TCPDF) заставить код создавать подписи утверждения.

...