PHP TCPDF подписать PDF

#php #pdf #tcpdf #signature

Вопрос:

Я хотел бы подписать PDF-файл с помощью библиотеки TCPDF. Я нашел пример на https://tcpdf.org/examples/example_052/ .

Единственная проблема заключается в том, как получить действительный сертификат для этого.

Я попытался связаться с некоторыми центрами сертификации, но они могут выдавать сертификаты на аппаратном обеспечении (USB-токен), которое можно использовать для ручной подписи документов. Я бы хотел, чтобы этот процесс был автоматическим на стороне сервера, чтобы пользователи могли загружать подписанные сертификаты.

Итак, вопрос в следующем: возможно ли это? И если да, то существует ли центр сертификации, который может выдавать сертификаты такого типа?

Комментарии:

1. Открыты ли вы для альтернативных решений, чем TCPDF?

2. PDF создается с помощью TCPDF, но если есть библиотека, которая может просто подписать PDF, это должно быть нормально

Ответ №1:

Разве вы не читали ссылку, которую вы разместили?

Из исходного кода (ниже PDF):

 /*
NOTES:
 - To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt
 - To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12
 - To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes
*/
 

Самозаверяющий сертификат совершенно законен. Кроме этого, вы можете купить сертификат сроком на 1 год у любого надежного поставщика (сертификат X509, такой же, как используется для SSL).

И наконец: вы не выдаете сертификат… вы подписываете PDF-файл секретным ключом и подтверждаете его с помощью открытого ключа.

Комментарии:

1. Спасибо за ответ. Я не вижу никаких проблем с созданием сертификата. Единственный вопрос: если я отправлю PDF другому лицу, будет ли программа чтения PDF считать этот сертификат действительным, когда пользователь откроет файл?

2. Конечно… но доверяет ли вам пользователь, если вы использовали самозаверяющий сертификат?

Ответ №2:

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

В блоге есть сообщение 2015 года, где кто-то использовал вызовы CLI OpenSSL в TCPDF, чтобы заставить это работать с сертификатом и ключом на USB-токене.

Сегодня существует несколько облачных сервисов, которые предлагают системы управления ключами, которые будут хранить ключ на защищенном аппаратном устройстве:

Чтобы получить действительный сертификат для вашего ключа, вам необходимо подтвердить выдавшему его центру сертификации, что ваш закрытый ключ создан и хранится на таком защищенном аппаратном устройстве. В настоящее время это возможно только для облачных KMS Google автоматизированным способом (который может измениться в будущем — см., например, Здесь обзор сервисов и устройств, поддерживающих такую аттестацию).

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

Мы (Setasign) предлагаем коммерческое решение для подписи PDF на PHP под названием SetaPDF-Signer, которое поставляется с модулями для всех перечисленных систем управления ключами. Вы можете увидеть их в действии здесь:

В демонстрационных демонстрациях мы создаем подписи с поддержкой LTV (долгосрочная проверка) с сертификатами, выданными компанией Ensured. Аттестация проводилась с помощью экранных записей церемонии создания ключа.