Цифровая подпись в браузере с помощью смарт-карты или сертификата

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

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

Однако Google Chrome по состоянию на апрель 2015 года прекратил поддержку Java-апплетов (и других плагинов) - есть переключатель конфигурации, но он будет недоступен дольше, чем указано .
Mozilla Firefox не поддерживает дату поддержки NPAPI, но они называют ее "устаревшие технологии".
Что касается IE - он не поддерживает плагины в Modern UI.

Итак, с апплетами Java больше не является универсальным вариантом, каковы мои варианты?
До сих пор я исследовал:

  • Только ActiveX - только IE
  • Silverlight - нет доступа к сертификатам вообще и как плагин сталкивается с теми же ограничениями, что и Java
  • Расширения для браузера; Например, Firefox до версии 33 имел обыкновение иметь window.crypto.signText, но не больше
  • локальные приложения, установленные на клиенте, - нелегко установить, поддерживать, разрабатывать и обновлять несколько ОС и их различные версии.
  • Веб-криптография - "только основные криптографические функции", поддержка сертификатов

У меня кончились идеи. Все предложения приветствуются и оцениваются.

Ответ 1

Я сделал одно и то же исследование несколько недель назад, и первый вариант для меня - перейти на firefox (по крайней мере пока).

Альтернативой может быть перенос апплетов в JNLP java-клиентское приложение (возможно, с некоторой синхронизацией websocket/restful между java-клиентом/сервером/веб-страницей).

Я думаю, что варианты, о которых вы говорили, имеют меньшую поддержку среди браузеров, чем Java-апплет.

Ответ 2

Доступный API-интерфейс

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

У меня также есть дополнительное требование, так что подпись браузера работает на "старых" (IE9) браузерах.

Существует веб-API в https://www.4identity.eu/, распространяемый итальянским производителем смарт-карт Bit4id.

API 4identity, однако, на самом деле не является полным "веб-API", который использует простой Javascript, поскольку он по-прежнему требует загрузки только Windows-клиента (sic!). Клиент, насколько я понял, отвечает на пользовательский протокол keychain URL (у меня был вопрос, связанный с Oauth-2, о том, как обращаться с настольными приложениями...), что не является стандартным в соответствии с моими выводами. Клиент имеет доступ к хранилищу ключей, чтобы он мог загружать подписанный файл в удаленную веб-службу, которая была опрошена на странице Ajax.

Мне нужно сделать некоторые документы, чтобы получить полный доступ к API, и у меня нет информации о ценах. Тем не менее, я считаю, стоит подробно посмотреть.

Часть 2 вопроса

Для поддержки реальной цифровой подписи из браузера требуются поставщики браузеров и W3C, которые контролируют веб-стандарты, прилагают много усилий, возможно, те же усилия, которые они сделали для стандартизации DRM-решений в HTML5 ради мультимедийных компаний (режим критики). В настоящее время есть стандарт WebCrypto, но согласно исследование, он недоступен в "основных браузерах"

Цифровое подписание удаленного файла с помощью смарт-карты требует доступа к хранилищу ключей и реализации криптографических библиотек. Внедрение PaDES/CaDES с открытым исходным кодом является ожидаемым сообществом, но без окончательной реализации стандартного способа доступа к хранилищу ключей, к которому смарт-карта не может быть доступна.

См. также этот ответ.

Эта дополнительная часть ответа не применима к моему делу, так как мне требуется, чтобы это работало в старых браузерах.

Отказ от ответственности: я не, связанный с Bit4id, но я знаю их, так как у меня была возможность интегрировать их работу в мои приложения. Один из наших клиентов - партнер Bit4id.

Ответ 3

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

Альтернативой было бы установить сервер на удаленном компьютере, но вам все равно понадобится локально установленная служба для безопасного резервирования информации на смарт-карте на удаленном сервере. Та же проблема, что и выше.

Ответ 4

Расширения для браузеров пользователей, одним из которых является бесплатное расширение Sigher.Digital Chrome.

Пожалуйста, обратитесь к этому сообщению: Как сделать цифровую подпись GST Return или eReturn, используя JavaScript-браузер и USB-токен пользователя? Могу ли я использовать WebCrypto API?

это расширение имеет 2 метода JavaScipt типа знака:

  1. SignerDigital.signGstHash(hash) - предоставляет подпись CMS (PKCS7) с использованием SHA-256

  2. SignerDigital.signITHash(hash, PAN) - предоставляет хэш RSA SHA-256

Требуемые методы функции могут быть добавлены к этому расширению. Расширение края находится в рабочем состоянии и должно быть доступно в ближайшее время.