Спонсор: Microsoft
Опубликован: 25.06.2010 | Уровень: специалист | Доступ: платный
Лекция 10:

Проблема аутентификации. Инфраструктура открытых ключей

< Лекция 9 || Лекция 10: 12 || Лекция 11 >

Хранилища сертификатов

Сертификаты и соответствующие им закрытые ключи можно хранить на различных устройствах, например жестких дисках, смарт-картах и в ключах для порта USB. В Windows предусмотрен уровень абстракции, называемый хранилищем сертификатов, который служит для обеспечения единого способа доступа к сертификатам независимо от места их хранения. Windows поддерживает несколько типов хранилищ сертификатов. Хранилище локальной машины, например, доступно всем приложениям, запущенным с определенными привилегиями на этой локальной машине. Можно создать отдельное хранилище для каждой службы Windows на машине, и каждый пользователь может иметь отдельное хранилище сертификатов. Сертификаты в этих хранилищах защищены. Если у аппаратного устройства имеется поддерживаемый Windows криптопровайдер, можно получать доступ к данным, хранящимся на этом устройстве, используя интерфейс API хранилища сертификатов.

Если хранилище локальной машины шифруется ключом, управляемым локальным центром безопасности данной машины, то пользовательское хранилище шифруется ключом, хранимым в профиле пользователя [13.17]. В пределах одного хранилища Windows различает контейнеры, используемые для разных целей. Наиболее важными являются персональный ( Personal ) контейнер и контейнер под названием "Доверительный корневой центр сертификации " ( Trusted Root Certification Authorities ). Персональный контейнер обычно содержит все сертификаты, используемые приложениями (и пользователями, если речь идет о пользовательском хранилище), в то время как Trusted Root Certification Authorities хранит сертификаты для центров, издающих сертификаты. В контейнере Other People (Другие) содержатся сертификаты пользователей, с которыми имеется безопасная связь. Примером центра сертификации является VeriSign [13.22]. Любой сертификат, изданный доверительным центром, сертификат которого присутствует в хранилище Trusted Root Certification Authorities, считается заверенным системой. В Web -приложениях ASP.NET используется либо хранилище локальной машины, либо хранилище учетной записи службы (пользовательское хранилище служебной учетной записи, под которой выполняется системная служба Windows ); для приложений рабочей среды сертификаты обычно устанавливаются в хранилище пользователя.

Новый диспетчер Server Manager и связанные с ним мастера появились в результате попыток Microsoft сделать Windows Server 2008 (изначальное название продукта - Longhorn) по-настоящему модульной операционной системой [13.23]. Роль Active Directory ( AD ) Certificate Server состоит из четырех подкомпонентов: Certification Authority, Certificate Authority Web Enrollment, Simple Certificate Enrollment Protocol ( SCEP ) и Online Certificate Status Protocol ( OCSP ). В терминологии Microsoft эти подкомпоненты именуются также ролевыми службами. Первые два компонента ( Certification Authority и Certificate Authority Web Enrollment ) присутствовали в прошлых версиях Windows Certificate Services. Certification Authority - механизм сертификации и генератор списка отзыва; Certificate Authority Web Enrollment - набор Web -старниц, с помощью которых пользователи могут подписаться на получение сертификатов через Web -интерфейс. В прошлом SCEP -компонент входил в состав комплектов ресурсов Windows 2000 Server и Windows Server 2003. Благодаря SCEP сетевые устройства, такие как маршрутизаторы и коммутаторы, могут легко получить сертификаты из удостоверяющего центра Windows Certification Authority ( CA ). Компонент OCSP предоставляет новую службу, которой не было в прошлых версиях Windows. Через компонент OCSP пользователи и приложения могут получить информацию о состоянии сертификата в реальном времени (например, действителен сертификат или отозван).

Для получения доступа к хранилищу сертификатов Windows используется класс X509Store [13.8]. В его конструкторе указывается местоположение хранилища (текущего пользователя или компьютера) и имя хранилища. Внутренние имена не всегда совпадают с именами, представленными в оснастке MMC ( Microsoft Management Console ). Контейнер Personal соответствует имени My, Other People - AddressBook.

Получив правильный экземпляр X509Store, можно выполнять поиск, извлечение, удаление и добавление сертификатов. Поиск сертификатов можно выполнять на основе разных критериев, включая имя объекта, серийный номер, хеш, кем выдан сертификат и период его действия. Если извлечение сертификатов из хранилища осуществляется программным способом в приложениях, необходимо использовать уникальное свойство - например, идентификатор ключа объекта. Свойство HasPrivateKey сообщает о наличии или отсутствии соответствующего закрытого ключа. Свойства PrivateKey и PublicKey возвращают соответствующий ключ в виде экземпляра RSACryptoServiceProvider. При проверке сертификата следует учитывать несколько критериев, в особенности - кем он выдан (как правило, пользователь доверяет сертификатам, выданным центром сертификации из списка доверенных центров сертификации ) и его текущую действительность ( сертификаты могут становиться недействительными, например, при истечении срока их действия или при отзыве выдавшим их центром сертификации ). Для проверки этих свойств можно использовать класс X509Chain. Используя этот класс, можно указать политику проверки действительности - например, запрашивать доверенный корневой центр сертификации или указывать, требуется ли проверять сетевые или локальные списки отзыва. Если требуется проверить сертификаты, использовавшиеся для подписывания данных, важно проверить, был ли сертификат действительным на момент вычисления подписи - для этого класс X509Chain предоставляет возможность изменить время проверки.

Поддержка протокола SSL

Протокол проверки подлинности SSL [13.12] основан на сертификатах. В .NET Framework поддержка протокола SSL состоит из двух частей [13.8]. Специальный (но наиболее широко используемый) случай SSL через HTTP реализуется посредством класса HttpWebRequest (в конечном счете, этот класс используется также для клиентских прокси веб-сервисов).

При подключении к конечной точке, защищенной протоколом SSL, сертификат сервера проверяется на клиенте. По умолчанию в случае сбоя проверки подключение незамедлительно закрывается. Можно переопределить этот вариант поведения, обеспечив ответный вызов к классу с именем ServicePointManager. При каждой проверке сертификата стеком HTTP клиента сначала проверяется, обеспечен ли ответный вызов. Если обеспечен - выполняется соответствующий код. Для подключения ответного вызова необходимо предоставить делегата типа RemoteCertificateValidationCallback. Протокол SSL поддерживает также проверку подлинности клиента с помощью сертификата. Если веб-узел или веб-сервис, к которой требуется получить доступ, требует сертификат клиента, то как прокси клиента веб-сервисы, так и HttpWebRequest предоставляют свойство ClientCertificates типа X509Certicate.

В пакете .NET Framework 2.0 введен новый класс SslStream, позволяющий поместить SSL поверх любого потока, а не только HTTP. SslStream осуществляет поддержку стандартных сертификатов . NET несколькими способами, например, с помощью механизма ответного вызова проверки.

Краткие итоги

В рамках лекции были рассмотрены основные принципы технологии PKI, в т.ч. понятие удостоверяющего центра, технологии работы с отозванными сертификатами. На примере решения от Microsoft проанализированы детали реализации.

< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Татьяна Крыжановская
Татьяна Крыжановская
Украина, Одесса
Valeriya Gubareva
Valeriya Gubareva
Россия