SSL и перевоплощение

ноября 12 2009 by admin in Безопасность

Если сервер аутентифицировал клиента, получив его сертификат (т. е. имела место не анонимная аутентификация), сервер может позаимствовать права этого клиента. Заимствование прав при этом фактически не отличается от аналогичной процедуры с применением других протоколов с SSPI. Вы просто передаете описатель контекста функции ImpersonateSecurityContext или получаете маркер непосредственно, обращаясь к QuetySecurityContextToken. (Обе эти методики рассмотрены ранее в этой главе.)
Однако остается один актуальный вопрос: как Windows 2000 создает маркер для пользователя, не имея ничего, кроме его сертификата? Ответ: установив соответствие сертификата в Active Directory или с помощью специфической информации, которую Microsoft встраивает в сам сертификат. Всего есть три способа установить соответствие между сертификатом и маркером для учетной записи доверенного объекта в домене Windows 2000.
Прежде чем рассказывать, как устанавливается соответствие между сертификатом и пользователем в домене, я хотел бы подчеркнуть важность самой этой возможности. Если к серверу под управлением Windows 2000 подключается клиент с известным сертификатом, сервер может построить для этого клиента маркер и зарегистрировать его на сервере независимо от того, под управлением какой ОС работает клиент. Это значит, что вы можете заимствовать права клиента, ПО которого работает на машине под управлением UNIX, Windows или другой системы, поддерживающей SSL
Чтобы установить соответствие между сертификатом и учетной записью пользователя в Windows 2000, можно применить три подхода.
Соответствие «один к одному* Любой сертификат, подписанный издателем, которому доверяет сервер, может быть связан с учетной записью пользователя. Когда такой сертификат используется в SSL-соединении с заимствованием прав, система ищет общее имя и имя издателя сертификата в Active Directory, чтобы определить учетную запись пользователя, для которой нужно создать маркер.
Соответствие «многие к одному* Любой центр сертификации, которому доверяет сервер, может быть связан с учетной записью пользователя. Когда любой сертификат, подписанный этим центром, используется в SSL-соединении с заимствованием прав, система ищет в Active Directory имя издателя, чтобы определить учетную запись пользователя, для которой нужно создать маркер.
UPN-соответствие Чтобы установить соответствие с помощью UPN (user principal name) — имени пользователя, имеющего учетную запись в данной среде, — в отличие от двух других подходов информация из сертификата используется для поиска учетной записи пользователя, для которой нужно создать маркер. UPN является именем учетной записи, права которой нужно заимствовать, и в сертификате это имя должно существовать как специальное поле. Выглядеть оно может примерно так: «jclark@subdo-main.microsoft.com».
Хотя перевоплощение для SSL-соединений не представляет проблем, за администрирование соответствий сертификатов вы отвечаете сами. Простейший подход, требующий минимум администрирования, — UPN-соответствие. Все, что вам нужно в этом случае, — центр сертификации на базе Microsoft Certificate Services в качестве центра сертификации предприятия. Затем вы запрашиваете у центра сертификат «пользователя». Этот сертификат будет включать атрибут UPN, содержащий имя пользовательской учетной записи, запросившей сертификат. Если этот сертификат применяется при подключении клиента к серверу по протоколу SSL, права его владельца могут быть заимствованы сервером.
Вы, конечно, можете захотеть заимствовать права сертификатов, не содержащих специфической информации, которую добавляет Microsoft. Для этого вам потребуется явно установить соответствия в Active Directory. Чтобы установить соответствие между сертификатом и пользователем в Active Directory типа «один к одному» и «многие к одному», используются похожие методики.
Сначала вам следует экспортировать сертификат в .CER-файл. Этот тип файла имеет стандартный формат для экспорта сертификатов и включает подписанную копию сертификата и открытый ключ, но не включает соответствующий закрытый ключ для сертификата. Модульный компонент Certificates в ММС позволяет экспортировать сертификат, просто щелкнув его правой кнопкой мыши и выбрав All Tasks, а затем Export. Таким образом вы запустите мастер Certificate Export Wizard.
Получив .CER-файл, нужно создать соответствие для учетной записи пользователя в Active Directory в следующей последовательности:
1. в ММС открыть модульный компонент Active Directory Users and Computers;
2. в меню View выбрать Advanced Features;
3. в левой панели выбрать папку Users;
4. в правой панели щелкнуть правой кнопкой пользователя, к которому вы хотите привязать сертификат, и выбрать Name Mappings в контекстном меню;
5. на вкладке Х509 Certificates окна Security Identity Mapping нажать кнопку Add;
6. выбрать .CER-файл с нужным вам сертификатом и нажать Open — появится диалоговое окно Add Certificate:
7. если вы установите флажок Use Subject For Alternate Security Identity у вас будет соответствие «один к одному»;
8. если сбросить флажок Use Subject For Alternate Security Identity и оставить установленным только флажок Use Issuer For Alternate Security Identity, получится соответствие «многие к одному».
После этого серверное ПО сможет заимствовать права клиента.
При установлении соответствий сертификатов есть две распространенные проблемы, на которых нужно остановиться. Во-первых, если сервер не доверяет издателю сертификата, у клиента, подключающегося с таким сертификатом, не могут быть позаимствованы права. Во-вторых, если сертификат является пользовательским, созданным центром сертификации на базе Microsoft Certificate Services, прежде чем в Active Director)' будет установлено явное соответствие, будет задействован UPN. Так что при попытке установить соответствие такого сертификата пользователю в Active Directory результаты могут быть непредсказуемыми.