Доступ к подписи / шифрованию в хранилище ключей браузера с помощью JavaScript - пример кода? (WebCryptoAPI)

У меня есть веб-сервер, который разрешает доступ только с использованием аутентификации X509. Работает как шарм. Теперь я хочу расширить использование сертификатов X509 (которые хранятся в хранилище ключей браузера пользователя) до

  • Подписать данные перед их отправкой на сервер (используя JavaScript и HTTPPost)
  • Расшифровать данные, прочитанные с сервера (где они зашифрованы с использованием открытого ключа пользователя, хранящегося там)

Я нашел этот пример с RSA Signature, который довольно близок... только он берет ключ из текстовой области HTML. Я хочу прочитать это из хранилища ключей. Теперь криптография постоянно меняется:

Я ищу некоторые рабочие примеры для подписи и шифрования (у меня есть некоторые на Java, но не на основе браузера JavaScript).

Помощь очень ценится

3 ответа

На данный момент стандарт W3C WebCrypto определяет объект javascript crypto внутри window выполнять шифрование, цифровые подписи, генерировать ключи и так далее с помощью JavaScript. Однако стандартный способ доступа к локальному хранилищу ключей для выполнения таких операций, как подписи с помощью клиентских ключей, не определен. Так что в настоящее время не существует распространенного способа сделать это в javascript, у каждого браузера есть свой путь; В IE вы можете сделать это с ActiveXObject("CAPICOM.Store");, с использованием Firefox window.crypto.signText("textToSign", "ask"); (кажется, что теперь он устарел, посмотрите здесь, фактический API, кажется, не поддерживает его: больше информации здесь), для chrome я не уверен, однако использование NativeSDK Client может быть возможным.

Другая возможность также использует Java-апплеты со всеми проблемами, которые эта технология имеет в эти дни.

Есть также проект на github, который инкапсулирует в javascript поведение для подписи (только с IE и firefox) с использованием общего объекта, который имеет обе реализации, я пробую это несколько месяцев назад и правильно работаю с IE/Firefox, теперь с firefox не делает не работает, потому что параметры API устарели, если вам интересно, посмотрите на: Glamdring / js-signer

Вы также можете проверить мой вопрос, где я задавал аналогичный вопрос: JS подпись на Chrome с OS хранилище ключей

Надеюсь это поможет,

Невозможно получить доступ к "локальному хранилищу ключей" в браузере. Браузеры медленно удаляют доступ к вещам, которые нарушают Единую Политику Происхождения, применяемую браузерами. Это включает в себя такие вещи, как плагины, тег keygen и т. Д.

PKIjs был создан с учетом политики одного и того же происхождения PKI, вот пост, который я сделал на эту тему - https://unmitigatedrisk.com/?p=503

WebcryptoAPI не может получить доступ к локальному хранилищу ключей. Современные браузеры не поддерживают старые методы, такие как апплет или ActiveX. Таким образом, одним из решений является расширение для браузера. Расширение браузера требует, чтобы хост-приложение было установлено на клиентском компьютере, и приложение становится мостом между браузером и локальным хранилищем ключей!

В зависимости от ваших требований вы можете обратиться к одной из нескольких ссылок, приведенных в ответе /questions/38169333/tsifrovaya-podpis-s-ispolzovaniem-sertifikata-klienta-v-aspnet/55231269#55231269.

https://github.com/GlobalSign/PKI.js поддерживает сертификаты X.509.

Инфраструктура открытых ключей (PKI) является основой того, как управление идентификацией и ключами осуществляется сегодня в сети. PKIjs - это чистая библиотека JavaScript, реализующая форматы, используемые в приложениях PKI. Он основан на WebCrypto (API веб-криптографии) и стремится сделать возможным создание собственных веб-приложений, использующих X.509 и связанных с ними форматов, в Интернете без плагинов.

Другие вопросы по тегам