Использование сертификатов: Подпись данных на стороне клиента (исходники)Источник: gotdotnet
Одна из задач, которая у вас может возникнуть - это подписать некоторые данные на стороне клиента в браузере пользователя. Такая задача может возникнуть тогда, когда пользователь подает некоторые важные данные, и для того, чтобы он в будущем не отказывался со словами "Это делал не я!" от этих данных. Для этого могут служить сертификаты. Подробнее о сертификатах и о SSL можно узнать где угодно, достаточно в поисковике набрать "SSL сертификаты" и информации об их назначении и о необходимости будет предостаточно.
Для реальных задач вам, скорее всего, понадобятся сертификаты удовлетворяющие алгоритмам ГОСТа, одна из программ реализующая их это КриптоПро, хотя даже вроде как и единственная. Но для того чтобы разрабатывать или тестировать сама программа вам не понадобится. Идея сертификатов так же в том, что пользователь и разработчик не должны вникать в то, какие алгоритмы они реализуют, какие типы ключей в них содержаться, и программа, работающая с сертификатами одного типа так же работала бы на сертификатах другого типа (это в теории, в практике может быть будут проблемы с некоторыми настройками контейнеров и вообще администрированием). Главное - для нашей задачи - это чтобы сертификат сервера и клиента соответствовали одному алгоритму. Для тестирования мы можем воспользоваться Windows Server 2003 и его службой сертификации. Для этого необходимо при помощи мастера компонентов Windows установить службу сертификации, во время установки будут заданы некоторые вопросы, относительно имени сервера сертификации, срока его службы и остального. После установки мы будем иметь по адресу http://localhost/certsrv/ веб сайт, предоставляющий возможность запросить сертификат. А в администрировании в центре сертификации мы сможем подтверждать запросы на выдачу сертификатов. Если разрабатывать вы будете на Vista, либо Windows 7, тогда вам необходимо будет установить на Win2003 патч KB922706. Другой способ создавать тестовые сертификаты при помощи программки makecert. Так же можно использовать и какие либо другие тестовые службы сертификации. У крипто про так же есть внешний тестовый сервер сертификации. Первое что необходимо сделать - это установить сертификат ЦС на машину, на которой вы будете разрабатывать ваше приложение, чтобы она могла доверять этому центру выдачи и могла использовать сертификаты от этого центра. Второе - это сгенерировать сертификат проверки сервера на эту машину. Имя сертификата должно совпадать с dns именем веб-приложения, но так как мы разрабатываем приложение локально, то для тестов мы возьмем имя localhost (хочу заметить, что если вы выдали сертификат на имя www.mydns.ru, то обратившись к mydns.ru вы увидите ошибку о том, что сертификат выдан не на это имя). Важно еще знать, что есть хранилище сертификатов пользователя, и отдельно хранилище сертификатов машины. По умолчанию, стандартно, сертификаты устанавливаются в хранилище пользователя, а для того чтобы сертификат проверки сервера использовать на сайте необходимо его положить в Local Computer/Personal. Посмотреть в каких местах какие сертификаты находятся можно следующим способом: запускаем Microsoft Management Console (вызывом mmc.exe) там нажимаем ctrl+m и выбираем snap-in Certificates (сначала пользователя, затем Local Computer) и там вы видим полное дерево сертификатов. Следующим действием нам нужно установить сертификат localhost на сайт. Открываем IIS и в зависимости от его версии настройки могут быть разные. В IIS 5.1 или 6.0 в окне свойств сайта нужно перейти на вкладку Security и там при помощи кнопки Security установить сертификат. В IIS 7 необходимо открыть свойства "Bindings…" и там добавить binding с типом https, в этом же окне необходимо будет выбрать сертификат (если сертификата в выпадающем списке нету, значит он лежит не в верной директории либо сертификат не с типом проверки подлинности сервера). Теперь можем проверить, что наш веб-сайт откликается на https и может соединиться посредством SSL шифрования для этого набираем в браузере https://localhost/... (если не открывается - проверьте что установлен сертификат ЦС в Trusted Root Certification Authorities). Установка сертификата на сайт дает нам доступ к сайту с шифрованием. Можно использовать при помощи настроек так же и двухстороннее шифрование, тогда каждый пользователь, заходящий на сайт по https пути должен будет указать и свой сертификат (настройка может быть "не указывать", "желателен", "необходим").Для того чтобы производить подписывание на клиенте данных необходимости в установке серверного сертификата нету, но вряд ли перед вами будет стоят задача подписи без установки зашифрованного соединения. Теперь приступим к подписыванию данных. Создаем ASP.NET веб-сайт, на страничку Default.aspx кладем следующие контролы: Кнопка btnSignData сначала вызывает javascript функцию SignData() со следующим кодом: Данный скрипт как раз и подписывает данные на стороне клиента. Он работает только в IE, во время работы скрипта он может ругаться, требовать прав на запуск ActiveX объектов, самое простое добавить данный сайт в зону Trusted Sites. На стороне сервера можем выполнять следующий код при нажатии на кнопку: Для выполнения данного кода может потребоваться установить reference на библиотеку System.Security, включающую namespace System.Security.Cryptography. Таким способом вы сможете не просто хранить какие-либо данные, может быть важные вам, а к тому же и быть уверенным в их достоверности. Надеюсь, эта статья вам поможет в начальном изучении сертификатов. |