Цифровая подпись в браузере с помощью смарт-карты или сертификата
Мне нужно создать цифровую подпись некоторых данных 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 типа знака:
-
SignerDigital.signGstHash(hash) - предоставляет подпись CMS (PKCS7) с использованием SHA-256
-
SignerDigital.signITHash(hash, PAN) - предоставляет хэш RSA SHA-256
Требуемые методы функции могут быть добавлены к этому расширению. Расширение края находится в рабочем состоянии и должно быть доступно в ближайшее время.