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

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

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

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

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

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

Ответ 1

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

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

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

Вы также можете проверить мой вопрос, где я задал аналогичный вопрос: подпись js на chrome с OS keystore

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

Ответ 2

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

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

Ответ 3

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

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