Раскрытие информации: я работаю в CISPL.
На данный момент WebCrypto API не предоставляет доступ к (Windows) или каким-либо другим хранилищам ключей или локальному крипто-устройству USB / Smartcard.
Также в большинстве сценариев подписи, для требования защиты файла PDF в пределах границ сервера, не рекомендуется отправлять полный файл PDF в браузер или на сервер API подписи.
Таким образом, хорошая практика - создать хэш PDF для подписи, отправить хеш в браузер и использовать javascript через расширение браузера для доступа к некоторому приложению, работающему в локальной системе, для доступа к локальному хранилищу ключей (или USB / смарт-карте) и создания подписи и отправки обратно ( PKCS7 или контейнер CMS в случае подписи PDF) на сервер, где подпись может быть вставлена обратно в PDF, из которого был создан хэш для подписи и отправлен в браузер или на сервер API подписи.
Для сценариев подписи на основе браузера моя компания предоставляет одно такое бесплатное расширение браузера Signer.Digital и библиотеку .NET, необходимую на сервере. Локальную систему (хост, работающий за браузером Chrome в Windows) можно загрузить по адресу сайт загрузки cNET При установке этого хоста и перезапуске Chrome автоматически добавляется Signer.Digital Chrome Extension и / или Signer.Digital Расширение Firefox
Фактическая работа этого расширения проиллюстрирована здесь вместе с полным просмотром кода и ссылкой для загрузки на рабочий пример исходного кода проекта VS 2015.
Javascript для вызова метода из расширения:
//Calculate Sign for the Hash by Calling function from Extension SignerDigital
SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256") //or "SHA256"
.then(
function (signDataResp) {
//Send signDataResp to Server
},
function (errmsg) {
//Send errmsg to server or display the result in browser.
}
);
В случае успеха возвращает подпись pkcs7 в кодировке Base64 - используйте подходящую библиотеку или библиотеку, предоставленную Signer.Digital для вставки подписи в pdf
В случае неудачи возвращает сообщение об ошибке, начиная с ошибки SDHost:
Цифровая подпись из браузера
- Сервер отправляет хеш данных / документа / контента для подписи в браузер.
- Браузер использует Signer.Digital Browser Extension Javascript API для вызова действия от Signer.Digital Browser Extension Host.
- В Windows хост расширения браузера использует хранилище сертификатов Microsoft и базовый CSP для подписания хэша.
- В Linux хост расширения браузера использует библиотеку PKCS # 11 .SO Crypto Device для подписания хэша.
- Необработанная подпись (подпись хэша) или контейнер подписи возвращаются в браузер подписавшим. Хост расширения цифрового браузера.
- В случае крипто-устройства, а именно. USB-токен или смарт-карта, закрытый ключ пользователя никогда не выходит из устройства, но хэш для подписи отправляется на устройство для его подписи.
- Веб-приложение (Javascript в браузере) отправляет подпись обратно на сервер, и ее можно изменить в PDF-документе, XML или Json или по мере необходимости.
person
Bharat Vasant
schedule
14.04.2019