У меня сложная ситуация, когда мне нужно, чтобы клиент, подключенный к сайту ASP.NET MVC, подписывал и расшифровывал большие двоичные объекты своим закрытым ключом, чтобы сервер никогда не видел материал закрытого ключа. В случае расшифровки это зашифрованные сеансовые ключи. Допустимо, чтобы сервер видел ключ сеанса, но не закрытый ключ пользователя.
То есть мне нужно представить пользователю некоторый контент в браузере, иметь некоторый javascript (или java-апплет, или silverlight и т. Д.), Выполняющий клиентскую часть, которая связывается с аппаратным токеном на клиенте и возвращает результат сервер.
Это НЕ аутентификация на стороне клиента. Мне не нужно просто проходить аутентификацию через IIS с помощью сертификата. Аппаратными токенами являются USB-ридеры HID OmniKey.
Мое понимание доступных опций:
1. Mozilla Javascript Crypto - Кажется, это оптимальный маршрут. Похоже, что Firefox предоставляет различные события и функции смарт-карт удаленным сайтам. Я вижу, как подписывать текст, но ничего о расшифровке BLOB-объектов (самая большая цель). Кажется, есть способы загрузки модуля PKCS # 11, но после этого документация перестает работать.
2. Silverlight с повышенным доверием - это мой второй предпочтительный маршрут из-за знакомства с Silverlight и .NET. Silverlight 5 имеет возможность P / Invoke, поэтому я всегда могу вызывать модули PC / SC, но для этого требуется запуск Out of Browser, что я не могу сделать. Кажется, есть некоторые сообщения о запуске приложения Silverlight в браузере с повышенным доверием, но это глобальный параметр, и поэтому я не хочу снижать безопасность для других приложений.
3. ActiveX - компонент ActiveX может взаимодействовать с модулем ПК / SC, но это будет решение только для Internet Explorer. Если бы мне пришлось выбрать нужный браузер, я бы предпочел Firefox или Chrome.
3. Расширение Firefox / Chrome - насколько я понимаю, Firefox XPCOM - это C ++, и я могу просто напрямую вызывать библиотеки PC / SC, и расширение может взаимодействовать со скриптами / DOM на удаленном сайте. Я не уверен, как удаленный сайт может вызвать расширение Firefox. Другими словами, как удаленный сайт сообщает расширению «хорошо, пора подписывать»? Одним из таких примеров этого маршрута является XSign (хотя он не использует аппаратные токены).
4. Java-апплет - в конечном итоге это может быть единственный способ сделать это. Я нашел пару примеров / руководств, но я не знаком с Java. Java-апплет для подписи с помощью смарт-карты . В данном случае это просто простой апплет, который может связываться с токеном и публиковать результаты на сайте.
Есть ли другие варианты? Я полагаю, что вариант (1), Mozilla Javascript Crypto - лучший подход, но документация выходит за рамки. Спасибо за любое руководство.