2011-12-16 4 views
3

У меня немного сложная ситуация, так как мне нужен способ подключения клиента к сайту ASP.NET MVC для подписывания и дешифрования блобов с помощью их закрытого ключа, так что сервер никогда не видит частный ключевой материал. В деле дешифрования это зашифрованные ключи сеанса. Допустимо, что сервер видит ключ сеанса, а не секретный ключ пользователя.Личные ключи удаленного сайта и клиента

То есть, мне нужно представить пользователю некоторый контент в браузере, иметь некоторые javascript (или java-апплеты, или silverlight и т. Д.) На стороне клиента, которая обменивается данными с аппаратным токеном на клиенте и возвращает результат к серверу.

Это НЕ аутентификация на стороне клиента. Мне не нужно просто аутентифицироваться через IIS с сертификатом. Аппаратные токены - это USB-считыватели HID OmniKey.

Мое понимание доступных опций:

1. Mozilla Javascript Crypto - Это, кажется, оптимальный маршрут. Похоже, что Firefox предоставляет различные события и функциональные возможности смарт-карт для удаленных сайтов. Я вижу, как подписать текст, но ничего о расшифровке blobs (самая большая цель). Кажется, что есть методы для загрузки модуля PKCS # 11, но после этого документация останавливается.

2. Silverlight with Elevated Trust - Это мой второй предпочтительный маршрут из-за знакомства с Silverlight и .NET. Silverlight 5 имеет возможность P/Invoke, поэтому я всегда могу вызывать модули ПК/SC, но для этого требуется запуск Out of Browser, чего я не могу сделать. Кажется, что есть некоторые сообщения о запуске приложения Silverlight в браузере с повышенным доверием, но это глобальная настройка, и поэтому я не хочу уменьшать безопасность для других приложений.

3. ActiveX - Компонент ActiveX может взаимодействовать с модулем ПК/SC, но это будет решение только для Internet Explorer. Если вы захотите выбрать нужный браузер, я бы предпочел Firefox или Chrome.

3. Расширение Firefox/Chrome - Мое понимание - это Firefox XPCOM - это C++, и я могу просто напрямую вызвать библиотеки ПК/SC, а расширение может взаимодействовать со сценариями/DOM на удаленном сайте. Я не уверен, как удаленный сайт может вызвать расширение Firefox. Другими словами, как удаленный сайт сообщает расширение «ОК, пришло время подписать»? Одним из таких примеров этого маршрута является XSign (хотя он не использует аппаратные токены).

4. Яблочный апплет - В конечном итоге это может быть единственный способ сделать это. Я нашел пару примеров/руководств, но я не знаком с Java. Java Applet for Signing with a Smart Card. В этом случае это простой апплет, который может связываться с токеном и отправлять результаты на сайт.

Есть ли другие варианты? Я считаю, что вариант (1), Mozilla Javascript Crypto - лучший подход, но документация выходит за пределы разреженности. Спасибо за любые рекомендации.

+0

та же проблема ... – jle

ответ

0

Я практически изучил все варианты. Последний вариант (Java-апплет) наиболее подходит для вашего случая и проще всего реализовать. Недостатком является то, что JRE (Java Runtime Environment) уже должна быть установлена ​​на стороне клиента и хорошо работает с браузером. Пользователь также должен предоставить разрешение апплетам подключиться к своей смарт-карте при первом запуске.

BTW, если вы хотите использовать PKCS # 7, вы можете использовать Bouncy Castle. Он не имеет стандартного API в JDK.

PS: Не используйте JavaScript для криптографии. Javascript Cryptography Considered Harmful.

0

Возможно, вы могли бы подумать только о том, чтобы клиенты загрузили собственное приложение и установили его (один раз). Вы можете использовать это приложение для аутентификации и согласования ключа сеанса с вашим сервером - приложение может запустить браузер с ключом сеанса в URL-адресе запуска. «Родные» приложения, возможно, не были бы родными - используйте java или .net (если вы только окна) или python и т. Д.

 Смежные вопросы

  • Нет связанных вопросов^_^