Подписание PDF-файлов на серверном документе с использованием подписи пользователя
Вот что я хочу сделать:
- пользователь создает документ (html)
- редактировать -> сохранить PDF на сервере
- спросить, хочет ли пользователь подписать документ
- (да) вот проблема
- (нет) нет проблем
- ???? (не важный)
Итак, теперь проблема, с которой я сталкиваюсь, состоит в том, как сделать это (да) на шаге 3. Если подпись на сервере не проблема, у меня есть несколько классов html->php->pdf, которые могут подписываться с помощью цифровых подписей, но подпись должна быть на сервере в виде файла. Вопрос в том, как я могу сделать это прямо на сервере. Пользователь выбирает "да", подпись читается (из его считывателя на его компьютере) и отправляется на сервер, и подпись завершена. Здесь я считаю, что я не могу сделать это без чего-то вроде Java или около того. На мой взгляд, PHP и JavaScript наверняка не хватит для этого действия.
Кто-нибудь сталкивался с такой проблемой? Может быть, какая-нибудь готовая к использованию библиотека?
PS не совсем уверен, что теги верны, но не мог понять, что поставить.
1 ответ
Если сертификат с закрытым ключом находится на клиенте, то для подписи необходим клиентский модуль. JavaScript не будет достаточно, так как у него не будет доступа к ключу на клиенте. Хотя вы можете попробовать вызвать CAPICOM из JavaScript, это частичное (без поддержки PKCS#11), специфичное для Windows и устаревшее решение. Лучше всего иметь апплет браузера, написанный на Java, который будет выполнять подписывание (см. Ниже).
Наш продукт SecureBlackbox имеет распределенную подпись надстройки, которая делает именно то, что вы описываете (в настоящее время поддерживаются PHP, Java, ASP.NET и скомпилированные модули). Вы можете увидеть схему работы надстройки:
В нашем продукте мы предлагаем предварительно встроенные модули браузера - апплет Java, элемент управления ActiveX и апплет Flash, но в большинстве случаев достаточно апплета Java, так как он может получить доступ к хранилищам PKCS#11 и хранилищу сертификатов Windows в Windows. Для браузеров, которые не поддерживают Java-апплеты, SecureBlackbox позволяет использовать апплет через Java Web Start в качестве внешнего "приложения".
Возможно, вам потребуется заново создать эту полную схему, однако это сложный способ вычислить хэш на сервере и передать его клиенту для подписания, а затем вставить подпись обратно в документ.
Вероятно, было бы проще передать весь документ клиенту и иметь Java-апплет, который будет подписывать этот документ с помощью iText или Java-версии нашего SecureBlackbox, а затем загружать документ обратно на сервер.
Блок-схема Союзнических битов @Eugene Mayevski является очень хорошим представлением процесса подписи в браузере. Более старые методы - это java-апплеты, Active X и т. Д., Которые постепенно исключаются или выходят из новых предложений Modern Browser.
https://www.java.com/en/download/faq/chrome.xml
Плагин Java для веб-браузеров опирается на кроссплатформенную архитектуру плагинов NPAPI, которая поддерживается всеми основными веб-браузерами уже более десяти лет. Google Chrome версии 45 и выше прекратил поддержку NPAPI, поэтому Java Plugin больше не работает в этих браузерах.
Я немного опоздал, но пишу этот пост, надеясь, что ответ будет полезен для тех, кто все еще ищет расширение для браузера, чтобы подписывать PDF с USB-токена и MODERN Browser.
Пожалуйста, обратитесь к моему ответу в этом сообщении, чтобы проверить использование JavaScript и расширения браузера Signer.Digital.
Компонент цифровой подписи Java или.NET от https://signer.digital/ или любого другого поставщика может использоваться для цифровой подписи PDF с USB-токена браузера.
Для PHP компонент Java может использоваться через JavaBridge, запущенный на Tomcat через прокси-сервер Apache, для цифровой подписи PDF с USB-токена браузера и PHP на стороне сервера.
Надеюсь это поможет!