Как-то я забыл сделать краткий summary по теме. И вот он:

Первая часть серии рассказывает об общих проблемах парольной аутентификации и преимуществах аутентификации при помощи сертификатов.

Вторая часть рассказывает о подробностях аутентификации при помощи сертификатов, включая взаимодействие с протоколом Kerberos.

Третья часть в деталях разбирает достаточно важную часть темы — маппинг (ассоциация) сертификата с учётной записью пользователя.

Четвёртая часть в деталях рассказывает про требования к различным сертификатам, которые применяются в certificate-based client authentication (включая пользовательские и серверные).

Финальная часть цикла, демонстрирующая конфигурацию веб-сервера IIS и 802.11x wireless (WPA2-Enterprise) для поддержкие аутентификации клиентов по цифровым сертификатам. The End.

Monday, February 13, 2012 9:59:41 PM (FLE Standard Time, UTC+02:00)   Comments [1]    

 

Остальные материалы цикла:


КДПВ

В предыдущей части мы разобрали достаточно полезные вопросы по требованиям к сертификатам, вне зависимости от того, где вы их будете добывать (с внутреннего CA или покупать у коммерческого), требования везде одинаковые. Сегодня мы завязываем с теорией и приступаем к практике — настройка сервера IIS на использование сертификатов для аутентификации пользователей.

Установка и настройка веб-сервера IIS

Во-первых, нам нужно установить роль IIS (если он ещё не установлен) — Installing IIS 7.5 on Windows Server 2008 R2. По умолчанию IIS не поддерживает клиентскую аутентификацию по сертификатам, поэтому эту поддержку нужно добавить:

  1. В Server Manager выберите установленную роль Web Server (IIS).
  2. В меню Actions выберите Add Role Services.
  3. В списке компонентов промотайте до раздела Security и в нём установите чек-боксы напротив: Client Certificate Mapping Authentication и IIS Client Certificate Mapping Authentication.
  4. В диалоговом окне нажмите Next –> Install.

Когда эти компоненты установлены, запустите Internet Information Services Manager. Выделите корневой узел вашего веб-сервера и в средней панели выберите Authentication. Найдите в списке Active Directory Client Certificate Authentication и убедитесь, что он Enabled. Если нет, включите его. Учтите, что эта настройка действует на уровне всего сервера, а не конкретного веб-сайта. Как только включите, этот метод аутентификации будет доступен для всех веб-сайтов.

Следующим этапом следует выбрать веб-сайт, который будет использовать аутентификацию пользователей по сертификатам и настроить для него SSL. Если у вас уже есть серверный сертификат, можете сразу приступать к настройке биндинга. Если нету, можете использовать эту статью для запроса сертификата с корпоративного CA — Web server certificate enrollment with SAN extension.

Биндинг настраиваетя следующим образом:

  1. В IIS Manager выберите веб-сайт (или веб-приложение).
  2. В правой панели (раздел Actions) выберите Bindings.
  3. В диалоговом окне нажмите Add.
  4. Укажите прокол HTTPS, номер порта и выберите сертификат SSL, который будет использоваться для доступа к веб-сайту.
  5. Примените изменения.

В том же окне (настроек веб-сайта), в средней панели выберите SSL Settings:

image

Установите флажок на Require SSL (т.е. подключения к веб-сайту без SSL не поддерживаются) и выберите подходящий пункт для клиентских сертификатов:

  • Ignore — веб-сайт не будет использовать клиентские сертификаты совсем.
  • Accept — если у клиента есть подходящий сертификат, сервер будет пробовать его использовать. Если сертификата у клиента нету или клиент не хочет его использовать — веб-сайт переходит к другим формам аутентификации (Anonymous или Basic Authentication, например).
  • Require — если сертификата нет, тогда до свидания. Т.е. для просмотра веб-сайта требуется клиентский сертификат.

Когда выбрали подходящий режим, примените настройки (в правой панели нажмите Apply).

Настройка VPN и 802.11x wirelless

В обоих случаях (VPN и беспроводных сетей) вам потребуется использовать RADIUS для аутентификации пользователей. В Windows Server 2008 R2 есть свой RADIUS сервер, реализованный в службе Network Policy Server (NPS). После того, как роль NPS установлена, вам необходимо авторизовать сервер в Active Directory (если NPS установлен на рядовом сервере). Далее, вам нужно настроить клиенты RADIUS (точки доступа, серверы VPN). После того, как клиенты настроены и сконфигурированы, можно настраивать политики доступа к беспроводным сетям и/или VPN. Вот пример, как настраивается NPS для беспроводных сетей:

  1. В левой панели выберите корневой элемент: NPS (Local).
  2. В средней панели из выпадающего списка выберите "RADIUS Server for 802.1X Wireless or Wired Connections", и нажмите на ссылку "Configure 802.1X".
  3. В мастере "Configure 802.1X" выберите верхний переключатель — Secure Wireless Connections. Выберите имя для вашей политики или используйте имя по умолчанию. Нажмите Next.
  4. На странице Specify 802.1X Switches выберите только WAP objects и нажмите Next.
  5. На странице Configure an Authentication Method выберите "Microsoft: smart card or other certificate" и нажмите кнопку Configure. В открывшемся окне выберите сертификат, выданный для сервера NPS и нажмите Ok и Next.
  6. На странице Specify User Groups можете настроить группы пользователей, которым разрешён доступ к беспроводным сетям. Для всех пользователей Active Directory, используйте группу Domain Users. Нажмите Next.
  7. На странице Configure RADIUS Attributes вы можете настроить дополнительные атрибуты для WAP. Нажмите Next и Finish.
  8. В левой панели разверните Policies и выберите Network Policies.
  9. В средней панели выберите только что созданную политику.
  10. Перейдите во вкладку Conditions выберите дефолтный элемент и нажмите Edit.
  11. В секции Other снимите флажок с "Wireless – Other" и нажмите Ok.
  12. Вы можете добавить дополнительные требования. Например, ограничить доступ к беспроводным сетям по времени. Скажем, только в рабочее время.
  13. Перейдите во вкладку Constraints выберите секцию Authentication Methods и снимите флажки с:
    1. Microsoft Encrypted Authentication Version 2 (MS-CHAP-v2);
    2. Microsoft Encrypted Authentication (MS-CHAP).
  14. Перейдите во вкладку Settings.
  15. Выберите секцию Encryption и снимите флажки со всех элементов, кроме "Strongest Encryption (MPPE 128-bit)".
  16. Нажмите Ok, чтобы сохранить изменения.

По аналогичному принципу настраиваете аутентификацию клиентов по сертификатам и для VPN.

Вот, наверное, и всё, что я хотел рассказать в этом цикле постов. Надеюсь, кому-нибудь поможет.

Saturday, February 11, 2012 1:52:01 PM (FLE Standard Time, UTC+02:00)   Comments [0]    

 

Кто в теме — уже, наверное, знает. А кто не в теме — читаем занятный блог-пост: http://www.imperialviolet.org/2012/02/05/crlsets.html

Прежде, чем обсуждать суть проблемы, давайте вспомним основные моменты, связанные с PKI при подключении к веб-сайтам по HTTPS.

Как правило, при подключении к веб-серверу с использованием SSL (т.е. по протоколу HTTPS), веб-сервер посылает клиенту сертификат SSL. Клиент пропускает сертификат через сертификато-дробилку, называемой Certificate Chaining Engine (CCE). Этот самый CCE берёт сертификат, строит для него цепочку сертификатов. Если цепочка успешно построилась и закончилась каким-то корневым сертификатом, который установлен в Trusted Root CAs, CCE начинает проверять каждый сертификат в цепочке (кроме самоподписанного корневого сертификата) на отзыв. Если какой-то сертификат в цепочке оказался отозванным — приложение выкидывает ошибку на пол экрана пользователю, что сертификат отозван и не следует туда заходить. Если не отозван, веб-браузер продолжает установку подключения дальше. На этом мы и остановимся здесь.

Но Google решил, что проверять сертификаты на отзыв слишком накладно, поэтому эта функциональность будет скорее всего выпилена в более новых версиях Chrome (и это после стольких лестных комментариев в моём бложеке?). Вместо этого, они планируют всю информацию об отзыве сертификатов (очевидно, 100+ поставщиков) в виде обновлений. Т.е. десятки (а то и сотни) мегабайт трафика ежедневно вам гарантированы. Ладно бы, там было что-то полезное. Так нет — условная копия всех возможных CRL'ов коммерческих поставщиков сертификатов. И так изо дня в день. Поскольку каждый CRL подписан издающим CA, здесь появляется вопрос технической реализации. Единственное, что можно тут придумать — это просто брать все CRL'ы, паковать их как есть в один контейнер и доставлять в браузеры через обновления. Всё остальное — лютая ересь. Если гугл придумает что-то своё, сразу появится вопрос о доверии самопальному мегагитлерCRL'у от гугла. Т.е. доверия тут ноль, потому что гугл — это гугл, а поставщик сертификатов всё-таки, отвечает за информацию об отзыве.

Мотивируют они это в первую очередь вот чем:

The problem with these checks, that we call online revocation checks, is that the browser can't be sure that it can reach the CA's servers. There are lots of cases where it's not possible: captive portals are one. A captive portal frequently requires you to sign in on an HTTPS site, but blocks traffic to all other sites, including the CA's OCSP servers.

я, если честно, не очень понял причём здесь captive portals, но если любой другой трафик блокируется, откуда браузер (в нашем случае это Chrome) получит обновления? По телепатии, очевидно. Но предположим другой сценарий — клиент находится в запредельно lock-down сети с очень ограниченным доступом в интернеты или вообще без оного. А веб-сервер (и сертификат) установлены где-то внутри сети. Тогда с некоторой долей вероятности, проверить сертификат SSL на отзыв не удастся. Fail. Но это на самом деле решаемо:

  1. Если используется определённый набор сертификатов, можно вручную скачать CRL'ы конкретных поставщиков сертификатов и устанавливать их на клиенты.
  2. Скачивать CRL'ы вручную и складывать внутри сети. Далее, поднять свой локальный OCSP и направлять клиентов (после соответствующей настройки) на локальный OCSP для получения статуса отзыва сертификата с локального OCSP сервера.

Решение у этой проблемы есть. Далее:

If browsers were to insist on talking to the CA before accepting a certificate, all these cases would stop working. There's also the concern that the CA may experience downtime and it's bad engineering practice to build in single points of failure.

Нечасто услышишь, что серверы VeriSign, Thawte или GoDaddy (самые популярные поставщики сертификатов для SSL) испытывали даунтаймы.

But an attacker who can intercept HTTPS connections can also make online revocation checks appear to fail and so bypass the revocation checks! In cases where the attacker can only intercept a subset of a victim's traffic (i.e. the SSL traffic but not the revocation checks), the attacker is likely to be a backbone provider capable of DNS or BGP poisoning to block the revocation checks too.

Смахивает на диверсию. Но мы можем настроить браузер на вывод предупреждения, что информация отзыва для конкретного ресурса недоступна. Вот рецепт для Internet Explorer 7+: IE7 & SSL. Если вы увидели Certificate Warning, значит кто-то пойзонит BGP или роутит DNS не туда, куда надо.

If the attacker is close to the server then online revocation checks can be effective, but an attacker close to the server can get certificates issued from many CAs and deploy different certificates as needed. In short, even revocation checks don't stop this from being a real mess.

Разве что с этим можно согласиться. Но последние случаи с Comodo и DigiNotar показали, что реально эксплуатировать «левые» сертификаты достаточно сложно, но можно. Но давайте подумаем. Скомпрометировали мы Comodo и купили сертификат на имя login.live.com, установили сертификаты на веб-сервер и ждём посетителей. Если Comodo (или любой другой. Comodo здесь только для рифмы) не заметит, что они выписали сертификат тому, кому он не полагается, значит — Fail. Гугл об этом не узнает тем более. Если заметит — звонок в ставку, сертификат отзывается, Microsoft ставится на уши. Как-то так это выглядит сейчас. Придумать что-то более лучше — в условиях настоящей реальности пока нельзя.

So soft-fail revocation checks are like a seat-belt that snaps when you crash. Even though it works 99% of the time, it's worthless because it only works when you don't need it.

Здесь мы читаем примерно следующее: 99% водителей никогда не попадают в аварии, поэтому они могут не пристёгиваться. Но гарантию, что в оставшийся 1% не попадёшь именно ты — никто не даст. Поэтому, эта фраза может расцениваться как попытка очень толстого троллинга, не более того. Аргументы вида «я не пристёгиваюсь, потому что не врезаюсь» звучат не очень убедительно. Каждый разбитый насмерть водитель считал, что он никогда не пристёгивался и он в числе этих 99%. Who's next?

While the benefits of online revocation checking are hard to find, the costs are clear: online revocation checks are slow and compromise privacy.

Очень интересное суждение. Медленное? На сколько? Об этом чуть ниже. Прайваси. Я уважаю прайваси, но не особо уважаю прайвасидрочеров. Ок, мы при проверке сертификата обращаемся к OCSP издателя сертификата и он узнает, куда наш айпишник ходит. Но если быть честным, то быть честным до конца. Прайваси может существовать (опять же, в разумных пределах) на уровне передаваемых данных, но не мест посещения. Ваш интернет-провайдер точно знает, по каким сайтам вы шастаете и даже может подсчитать, сколько порно было скачано в прошлом месяце. Особо удачливые провайдеры могут даже примерно составить каталог скачанных диафильмов (не дай бог вам качать фильмы с собачками там или ещё всякое стрёмное кино). Учитывая, что SSL'ом обычно защищаются веб-сайты, в которые вы вводите действительно личную информацию (номера кредитных карт, персональные данные и всё такое.). А здесь, нехороший поставщик сертификатов SSL узнает, что вы каждый вторник заходите в интернет-банк. Любой человек, умеющий (и который имеет доступ) слушать трафик интернета всё равно узнает, куда вы ходите. Destination IP Address уж не спрячете никуда.

С другой стороны, ваш веб-браузер (в нашем случае, это снова Chrome) тоже знает, куда вы ходите. И какие ссылки кликаете и какие файлики качаете? Музыку? А оплатить налог за скачивание нелицензионного контента заплатить не хотите? Особенно, в свете последних нововведений в прайваси гугла, я бы больше остерегался именно гугла, чем верисайна.

С третьей стороны (я не понял, откуда у плоскости появилась третья сторона, но пусть будет. Сферическая), существует такая штука, как stapled OCSP response. А гугл о ней знает? Судя по всему — нет. Что это такое? А вот что, веб-сервер может сам для себя запросить информацию об отзыве для своего сертификата SSL. Один раз. И раздавать его каждому подключающемуся клиенту. Поскольку все запросы OCSP подписаны поставщиком сетификата SSL, риск компрометации здесь около нуля или чуть ниже. Поэтому этот stapled response можно без зазрения совести посылать клиенту вместе с самим SSL сертификатом.

The median time for a successful OCSP check is ~300ms and the mean is nearly a second.

я пробовар округлять по-разному, но nearly a second у меня не получилось. Я бы ещё кое-как притянул бы за уши nearly a half second, но целую секунду — мне совесть не позволяет.

This delays page loading and discourages sites from using HTTPS. They are also a privacy concern because the CA learns the IP address of users and which sites they're visiting.

выделенную часть явно писал умственный инвалид или кто-то, кто в этой кухне вообще ничего не понимает. Во-первых, веб-сайты не используют SSL там, где не надо вовсе не потому, что время загрузки страницы увеличивается на 0,3 секунды. Если весь мир завернуть в SSL — интернеты будут очень медленные, потому что даже при современном оборудовании нагрузка на процессор (криптография главным образом ложится именно на процессор) может вырасти очень значительно. Когда это надо — вопросов нет, надо использовать. А для чтения бложека (например, моего) никаких профитов из SSL не извлечёте, а сервер мой будет тормозить — факт. Ах, да. Сертификат SSL проверяется на отзыв только при подключении и потом не проверяется (до тех пор, пока не выйдет новый CRL). Т.е. задержку в 0,3 секунды получите при первой загрузке страницы. Вопрос прайваси мы уже разобрали выше.

Далее, написан один из вариантов реализации этой афёры — гугл договаривается с поставщиками сертификатов, чтобы те присылали им свои CRL'ы. Пока — в рамках CAB forum'а. Но и здесь есть интересные моменты:

We have to be mindful of size, but the vast majority of revocations happen for purely administrative reasons and can be excluded.

Ни один здравомыслящий CA не скажет гуглу, почему он отозвал тот или иной сертификат (т.е. административный или неадминистративный отзыв). Максимум на что может рассчитывать гугл — это revocation reason в CRL'е.

Вобщем, вы можете думать об этом что хотите, можете ненавидеть гугл и его гуглохром, можете любить их. Что я об этом думаю — вы уже знаете. Чтите privacy и EULA.

Thursday, February 09, 2012 12:30:33 AM (FLE Standard Time, UTC+02:00)   Comments [3]    

 

Остальные материалы цикла:


КДПВ

В предыдущей части мы поговорили о процессе и методах ассоциации сертификата с учётной записью пользователя в Active Directory. Сегодня мы поговорим уже про сами сертификаты, каким требованиям они должны удовлетворять и всё такое. Я пообещал, что в этой части мы приобщимся к практике. Но я передумал и мы снова займёмся теорией :)

Необходимый набор сертификатов

Поскольку у нас разговор идёт об аутентификации при помощи цифровых сертификатов, они нам обязательно потребуются. Для различных сетевых протоколов и методов аутентификации нам потребуется различный набор сертификатов. Итак:

Интерактивный логон при помощи смарт-карты

Для поддержки интерактивного логона при помощи смарт-карты, нам потребуется как минимум 2 вида сертификатов: клиентский сертификат, который записан на смарт-карте и сертификат контроллера домена. Каким условиям должен удовлетворять клиентский сертификат?

  • Должен быть выдан доверенным (как клиентом, так и контроллером домена) центром сертификации;
  • Должен быть действителен по времени;
  • Поле Subject — не имеет значения. Может быть пустым;
  • Расширение Enhanced Key Usage (EKU) должно содержать Smart Card Logon (1.3.6.1.4.1.311.20.2.2) и/или Client Authentication (1.3.6.1.5.5.7.3.2). Smart Card Logon обязателен для Windows XP и Windows Server 2003. В Windows Vista для логона смарт-картой можно использовать только Client Authentication. Но я буду советовать использовать оба;
  • Расширение Key Usage должно содержать Digital Signature (0x80);
  • Расширение Subject Alternative Name (SAN) должно содержать User Principal Name (UPN) пользователя. Если для каких-то целей этих UPN'ов прописано несколько, UPN для логона должен быть первым в списке.

Примечание: хоть мы и говорили, что расширение SAN в клиентском сертификате вовсе не обязательно и можно использовать различные формы explicit mapping, вы должны при любой возможности использовать implicit certifiate mapping по UPN и использовать explicit только когда другого выхода нет.

Windows CA предлагает нам 2 шаблона по умолчанию, которые годятся для этих целей: Smart Card Logon и Smart Card User. Единственное отличие этих шаблонов — Smart Card User содержит ещё EKU Secure Email (1.3.6.1.5.5.7.3.4). Вам следует использовать только шаблон Smart Card Logon или производный из него. Дело в том, что не рекомендуется объединять сертификаты, которые используются для логона (или цифровой подписи) с сертификатами, которые используются для шифровния.

Сертификат контроллера домена (KDC) должен удовлетворять следующим требованиям:

  • Должен быть выдан доверенным (как клиентом, так и контроллером домена) центром сертификации;
  • Должен быть действителен по времени;
  • Поле Subject — не имеет значения;
  • Расширение Enhanced Key Usage (EKU) должно содержать как минимум Server Authentication (1.3.6.1.5.5.7.3.1) и Client Authentication (1.3.6.1.5.5.7.3.2). Желательно в EKU включить Smart Card Logon (1.3.6.1.4.1.311.20.2.2), чтобы обозначить, что данный сертификат будет использоваться для аутентификации клиента по смарт-карте. Для того, чтобы обеспечить поддержку строгой проверки сертификата для KDC, в EKU необходимо включить KDC Authentication (1.3.6.1.5.2.3.5);
  • Расширение Key Usage должно содержать Digital Signature и Key Encipherment (0xa0);
  • Расширение Subject Alternative Name (SAN) должно содержать как минимум FQDN контроллера домена. А в идеале, ещё и FQDN и NetBIOS имена рассматриваемого домена.

Windows CA предлагает нам 3 шаблона по умолчанию, которые годятся для этих целей: Domain Controller, Domain Controller Authentication и Kerberos Authentication. Если у вас в домене есть контроллеры под управлением Windows Server 2003, следует использовать Domain Controller Authentication. Если у вас в домене все контроллеры под управлением Windows Server 2008 и выше, следует использовать шаблон Kerberos Authentication.

Примечание: для доменов с контроллерами на основе Windows Server 2003 можно использовать и шаблон Kerberos Authentication. Но контроллеры не извлекут таких профитов, как strong KDC validation. Так же, возможно появление следующей ошибки: Automatic certificate enrollment for local system detected the DNS name in the Kerberos Authentication certificate does not match the DNS name of the local computer. A new enrollment for one Kerberos Authentication certificate will be performed in 24 hours. Это известная проблема, поэтому для таких доменов лучше использовать шаблон Domain Controller Authentication.

В чём заключается суть аутентификации KDC? Если доменная машина выполняет аутентификацию с использованием PKINIT, клиентский компьютер убеждается, что удалённый хост не только имеет серверный сертификат и его имя соответствует имени в сертификате, но и является именно контроллером домена или сервером KDC, который является авторитарным для рассматриваемого домена. В процессе аутентификации, клиентский компьютер не имеет нотариально заверенногодостоверного списка контроллеров в домене. И наличие EKU = KDC Authentication и FQDN + NetBIOS имён домена в расширении SAN гарантированно идентифицирует хост как контроллер для домена, указанного в расширении SAN.

Логон на веб-странице

Для использования клиентских сертификатов для аутентификации пользователя на веб-сайте, веб-сайт должен быть сконфигурирован на использование SSL (это обязательное требование). Сертификат веб-сервера (сертификат SSL) должен отвечать следующим требованиям:

  • Должен быть выдан доверенным (клиентом и сервером) центром сертификации;
  • Должен быть действителен по времени;
  • Поле Subject — имя сервера, которое клиент вводит в адресной строке веб-браузера;
  • Расширение Enhanced Key Usage (EKU) должно содержать Server Authentication (1.3.6.1.5.5.7.3.1);
  • Расширение Key Usage должно содержать Digital Signature и Key Encipherment (0xa0);
  • Опционально, расширение Subject Alternative Name (SAN) может содержать дополнительные имена, которые могут использоваться для доступа к серверу. Если расширение SAN представлено в сертификате и поле Subject не пустое, SAN должен включать себя и имя из поля Subject. Подробнее здесь: Как правильно задавать имя сертификата при использовании расширения Subject Alternative Name (SAN).

Windows CA предлагает по умолчанию один шаблон, который годится для этой цели: Web Server.

Если вы не используете смарт-карту для аутентификации пользователя, сертификат для контроллера домена и смарт-карты (как описано в предыдущем параграфе). В противном случае (клиентский сертификат просто установлен в пользовательском хранилище сертификатов на клиенте), вам потребуется сертификат, отвечающий следующим условиям:

  • Должен быть выдан доверенным (клиентом и сервером) центром сертификации;
  • Должен быть действителен по времени;
  • Поле Subject — не имеет значения. Может быть пустым;
  • Расширение Enhanced Key Usage (EKU) должно содержать Client Authentication (1.3.6.1.5.5.7.3.2);
  • Расширение Key Usage должно содержать Digital Signature (0x80);
  • Расширение Subject Alternative Name (SAN) должно содержать User Principal Name (UPN) пользователя. Если для каких-то целей этих UPN'ов прописано несколько, UPN для логона должен быть первым в списке.

Windows CA предлагает нам по умолчанию 2 шаблона, которые отвечают предъявленным требованиям: Authenticated Session и User. Вам следует использовать шаблон Authenticated Session или производный от него для создания клиентских сертификатов. Шаблон User дополнительно содержит EKU для Secure Email и EFS. Как я уже говорил, не следует комбинировать в одном сертификате EKU для цифровых подписей или логона с EKU для шифрования.

Логон на сервере VPN

В зависимости от типа VPN (L2TP, SSTP) вам потребуется различный набор сертификатов (для PPTP отдельный серверный сертификат не требуется). Клиентский сертификат для любых видов VPN должен отвечать требованиям, описанным в параграфе «Интерактивный логон при помощи смарт-карты» (если используется смарт-карта) или «Логон на веб-странице» (если не используется смарт-карта). Далее, вам потребуется сертификат для RADIUS сервера. Этот сертификат должен быть установлен на RADIUS сервере или на самом сервере VPN, если используется Integrated Authentication и который отвечает следующим требованиям:

  • Должен быть выдан доверенным (клиентом и VPN сервером) центром сертификации;
  • Должен быть действителен по времени;
  • Поле Subject — FQDN сервера;
  • Расширение Enhanced Key Usage (EKU) должно содержать Server Authentication (1.3.6.1.5.5.7.3.1) и Client Authentication (1.3.6.1.5.5.7.3.2);
  • Расширение Key Usage должно содержать Digital Signature и Key Encipherment (0xa0);
  • Расширение Subject Alternative Name (SAN) должно содержать FQDN сервера.

Windows CA предлагает по умолчанию шаблон RAS and IAS Servers, который удовлетворяет всем требованиям для RADIUS сервера.

Для L2TP вам ещё потребуются компьютерные сертификаты для обоюдной аутентификации узлов и которые отвечают следующим требованиям:

  • Должен быть выдан доверенным (клиентом и сервером) центром сертификации. Причём, цепочки сертификатов обоих узлов должны заканчиваться одним и тем же сертификатом корневого CA;
  • Должен быть действителен по времени;
  • Поле Subject — имя сервера, которое клиент вводит при подключении к VPN серверу;
  • Расширение Enhanced Key Usage (EKU) должно содержать IP security IKE intermediate (1.3.6.1.5.5.8.2.2);
  • Расширение Key Usage должно содержать Digital Signature и Key Encipherment (0xa0);
  • Опционально, расширение Subject Alternative Name (SAN) может содержать дополнительные имена, которые могут использоваться для доступа к серверу. Если расширение SAN представлено в сертификате и поле Subject не пустое, SAN должен включать себя и имя из поля Subject. Подробнее здесь: Как правильно задавать имя сертификата при использовании расширения Subject Alternative Name (SAN).

Windows CA по умолчанию предлагает два шаблона, которые годятся для аутентификации узлов в L2TP: IPsec и IPsec (Offline). Если один из узлов не является членом одного и того же леса Active Diretory, следует использовать IPsec (Offline), потому что этот шаблон позволяет указывать поле Subject и расширение Subject Alternative Names в запросе. Шаблон IPsec автоматически строит эту информацию из Active Directory.

Для SSTP VPN вам потребуется сертификат SSL, который отвечает тем же самым требованиям, что и сертификат SSL для веб-сервера (см. параграф «Логон на сервере VPN»).

Логон в 802.11x сетях (Wireless)

Для получения доступа в беспроводную 802.11x сеть, точка доступа (WAP) должна быть настроена на использование RADIUS сервера для аутентификации и авторизации клиента. RADIUS сервер должен иметь сертификат, как описано в параграфе «Логон на сервере VPN». Требования к пользовательскому сертификату описаны в параграфе «Интерактивный логон при помощи смарт-карты» (если используется смарт-карта) или в параграфе «Логон на веб-странице» (если используется сертификат, установленный в пользовательское хранилище сертификатов).

Сертификаты центров сертификаций

При использовании сертификатов для аутентификации пользователей вам необходимо, что сертификат центра сертификации, который выпускает логонные сертификаты для пользователей и контролллеров домена, опубликованы в хранилище NTAuthCertificates в Active Directory. Если вы используете свой собственный Windows Enterprise CA, никаких дополнительных действий не требуется. Если вы используете сторонний CA (внешний, или CA на базе линупса), сертификат CA необходимо вручную опубликовать в указанное храналище. Например, можно использовать certutil.exe:

certutil –dspublish –f CAcertfile.crt NTAuthCA

Альтернативно вы можете это сделать через оснастку PKI Health Tool:

  1. Войдите в систему с правами Enterprise Admins;
  2. Запустите оснастку PKI Helath Tool (Start –> Run... –> pkiview.msc);
  3. Выделите корневой узел (Enterprise PKI) и в контекстном меню выберите Manage AD Containers. Перейдите во вкладку NTAuthCertificates. Используйте кнопку Add для того, чтобы добавить туда сертификат издающего CA.

Эпилог

В принципе, на этом можно завершать теоретическую часть, потому что этих знаний уже достаточно, чтобы переходить к практике. В следующей части я покажу, как применить аутентификацию пользователей при помощи сертификатов на примере веб-сервера (IIS).

Что бы почитать?

  • Что-нибудь почитайте, не сидите без дела :)
Sunday, February 05, 2012 4:27:17 PM (FLE Standard Time, UTC+02:00)   Comments [0]    

 

Остальные материалы цикла:


КДПВDisclaimer: Эта статья содержит сведения о правке реестра. Перед внесением изменений в системный реестр рекомендуется изучить процедуру его восстановления. Для получения дополнительных сведений о восстановлении реестра см. разделы «Восстановление реестра» или «Восстановление раздела реестра» справочной системы редактора реестра.


В предыдущей части мы поговорили о процессе аутентификации по сертификату (или смарт-картой), но не поговорили о том, как сертификат связывается (ассоциируется) с учётной записью пользователя в Active Directory. Процесс ассоциации сертификата с учётной записью называется certificate mapping. В мире Active Directory существует 2 вида маппинга:

  • Implicit certificate mapping;
  • Explicit certificate mapping.

Implicit certificate mapping

Implicit certificate mapping (в переводе звучит как «неявный» маппинг. В точности перевода могу ошибаться) является самым простым, шустрым и очевидным методом ассоциации сертификата с учётной записью пользователя. Для этого клиентский сертификат должен содержать расширение Subject Alternative Name и в нём должен быть прописан UPN (User Principal Name) пользователя:

Certificate with populated UPN in Subject Alternative Name

Other Name:
     Principal Name=Administrator@contoso.com

Контроллер домена извлекает UPN пользователя из сертификата и пытается найти такой же UPN в глобальном каталоге. UPN хранится в атрибуте userPrincipalName. Если такой UPN найден, сертификат привязывается к учётной записи пользователя с указанным UPN. В противном случае считается, что учётная запись не найдена и аутентификация проваливается.

На заметку: некоторые пользователи (особенно, которым нужен доступ в 2 и более леса, которые не связаны доверительными отношениями) думают, что можно накидать несколько UPN'ов в расширение и получать профит — один универсальный сертификат для логона в 2 и более леса. Если в расширении SAN указано несколько различных UPN'ов, контроллер домена будет читать только первый из списка.

В 99% случаев вы будете использовать только implicit certificate mapping, который используется по умолчанию.

Explicit certificate mapping

В отдельных случаях у вас может и не быть возможности использовать implicit certificate mapping. Например, это сторонний (или коммерческий) CA, который по каким-то причинам не может или не хочет включать UPN пользователя в расширение SAN. Или у вас просто есть сертификат от чужого леса и вы его хотите использовать для двух лесов, которые друг о друге ничего не знают. И знать не хотят, видимо. С implicit certificate mapping вы можете использовать сертификат только в одном лесу или в нескольких лесах — но при условии, что UPN'ы в лесах совпадают.

Так же, существует ненулевая вероятность, что у вас будет сертификат с прописанным UPN в расширении SAN, но вы захотите использовать этот сертификат для другого UPN. Что делать? По умолчанию, контроллер домена при наличии UPN в SAN применяет *implicit mapping*, т.е. привязка по UPN и он даже не попытается попробовать explicit mapping. Хоть, такие случаи достаточно редки, но бывают нужны, вы можете отключить implicit mapping на уровне домена создав следующее значение в реестре (на контроллерах домена):

KEY =  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Type = DWORD
Value Name = UseSubjectAltName
Value Data = 0

Примечание: это возможно только для Windows Server 2008 и выше. Детали описаны в статье How to disable the Subject Alternative Name for UPN mapping. Но я ещё раз предупреждаю, что делать это следует только когда вы чётко понимаете, что вы делаете и какие последствия вас могут ожидать.

One-to-one mapping

По умолчанию, каждый сертификат привязывается только к учётной записи, в свойствах которой он опубликован. На практике вы будете с этим работать в 99% случаев использования явного маппинга сертификата к учётной записи.

Суть этого метода заключается в том, что определённые свойства сертификата должны быть описаны в атрибуте altSecurityIdentities (доступно через Attribute Editor) свойств учётной записи пользователя. Вот как можно создать маппинг one-to-one в консоли Active Directory Users and Computers:

  1. Откройте оснастку Active Directory Users and Computers (dsa.msc);
  2. В меню View установите флажок на Advanced Features;
  3. Выберите учётную запись пользователя, с которой будут связываться сертификаты группы работников;
  4. В контекстном меню выберите Name Mappings;
  5. В открывшемся окне, кнопкой Add добавляете необходимые сертификаты.

Mapping properties

 

Смотрите, здесь уже используется (и не отключается) маппинг по Issuer DN Name и Subject DN Name. Т.е. если контроллеру предъявляют сертификат с такими же значениями полей Subject и Issuer, он привяжет этот сертификат к этой учётной записи, где настроен маппинг. Если снять чек-бокс «Use Subject for alternate security identity», любые сертификаты, выданные конкретным сервером CA будут мапиться к этой учётной записи и это будет many-to-one certificate mapping. Но не следует использовать маппинг только по издателю. О более гибких примерах маппинга мы поговорим ниже. Вот пример:

Security Identity Mapping

В данном случае любой сертификат с конкретным Subject DN, который выдан конкретным CA будет мапиться к рассматриваемой учётной записи.

Many-to-one mapping

Этот сценарий применяется очень редко, но для того, чтобы не оставлять пробелов, я решил написать несколько слов об этом в исключительно информативных целях. Суть этого метода заключается в том, что несколько разных сертификатов мапятся к одной учётной записи. Допустим, есть группа временных работников (или партнёры из другой компании), у которых нет индивидуальной учётной записи в Active Diectory, но им нужен доступ к веб-сайту, который использует аутентификацию клиентов по сертификатам. Как говорится, нет ножек — нет и мультиковнет учётной записи — нет доступа.

В случае с explicit certificate mapping, алгоритм поиска учётной записи с которой можно связать предъявленный сертификат усложняется. Контроллер домена будет искать в своей базе сертификаты и пытаться их забиндить по следующим признакам (именно в такой последовательности, как они здесь указаны):

  1. Точное совпадение полей Subject и Issuer — X509:<I><S>
  2. Только по полю Subject — X509:<S>
  3. По полям Issuer и Serial Number — X509:<I><SR>
  4. По расширению Subject Key Identifier — X509:<SKI>
  5. По Thumbprint (хешу всего сертификата) — X509:<SHA1-PUKEY>
  6. И, наконец, по полю RFC822 Name (он же адрес электронной почты) — X509:<RFC822>

Вот примерная таблица (зелёным отмечены правильные условия проверки, красным — неправильные):

altSecId

Например, у пользователя есть сертификат на CN=Oleg Krylov, OU=Users, DC=contoso, DC=com и который выдан CN=Contoso Corporate CA, DC=contoso, DC=com. Из картинки видно, что мы можем применить следующий биндинг: X509:<I><S>. И вот как его следует использовать в altSecurityIdentities:

  • X509:<I>DC=com,DC=contoso,CN=Contoso Corporate CA

Во-первых, элементы DN размещаются в обратном порядке от представления в сертификате. Т.е. сначала RDN, а потом уже CN, потому что они так кодируются в сертификате. Вот, пример ASN1 структуры сертификата VeriSign:

Distinguished name order in ASN.1

И посмотрите на Subject этого сертификата в UI: http://EVSecure-aia.verisign.com/EVSecure2006.cer. Т.е. вам необходимо взять сертификат и переписывать поле Subject/Issuer снизу вверх. Во-вторых, каждый элемент DN разделяется запятой и вокруг запятых пробелов быть не должно.

У сертификата есть расширение Subject Key Identifier = c1 2f a9 f1 c0 22 d4 37 a2 20 07 1d b9 ab 4a 12 ef f2 f9 fa и вы хотите сделать маппинг по этому расширению. Для этого в свойство altSecurityIdentities необходимо прописать строку следующего содержания:

  • X509:<SKI>c12fa9f1c022d437a220071db9ab4a12eff2f9fa

Если делаете маппиг по схеме X509:<I><SR> (по издателю и серийному номеру), следует учитывать, что байты серийного номера должны идти в обратном порядке. Т.е. если в сертификате мы видим вот такой серийный номер: 2e 33 87 4f 6f e2 d4 1e d3 ff ff 35 f6 a4 c9 18, в условии маппинга следует переписывать байты справа налево: 18 c9 a4 f6 35 ff ff d3 1e d4 e2 6f 4f 87 33 2e или вот так:

  • X509:<I>DC=com,DC=contoso,CN=Contoso Corporate CA<SR>18c9a4f635ffffd31ed4e26f4f87332e

Это связано с тем, что в структурах C серийный номер (CRYPT_INTEGER_BLOB) записывается в обратном порядке и KDC будет использовать серийный номер так, как он хранится в структуре.

Если на каком-то этапе удалось обнаружить однозначное сходство — дальнейшие попытки биндинга сертификата не производится, а сертификат привязывается к учётной записи и пользователь продолжает процесс аутентификации. Кстати, почему так сложно? Почему бы не взять и не просто сверить 1:1 предъявленный сертификат, с опубликованным в свойствах учётной записи? Ответ тут достаточно очевидный — вы можете использовать many-to-one (когда сравниваются только определённые атрибуты сертификатов). И если вам надо связать множество сертификатов с одной учётной записью, их всех придётся публиковать, а это может неприятно отразиться на репликации. И короткие строки сравнивать быстрее, чем бинарные массивы.

Примечание: many-to-one certificate mapping можно реализовать как средствами Active Directory (описано в статье), так и средствами IIS. При установки роли веб-сервера, у вас есть 2 похожих пункта:

Client Certificate MApping Authentication schemes

С виду их не отличишь, но теперь вы знаете, что первый пункт (Client Certificate Mapping Authentication) использует маппинг настроенный в Active Directory, а IIS Client Certificate Mapping использует маппинг настроенный в IIS. Подробнее: Many-To-One Mappings <manyToOneMappings>.

Эпилог

Чувствую, что написал очень много и непонятно. Я не обещал, что будет легко. В принципе, вы можете читать только раздел Implicit certificate mapping, а остальное — только когда потребуется или просто ради лулзов :). В следующей части перейдём немного от теории к практике.

Что бы почитать?

Friday, February 03, 2012 8:27:58 PM (FLE Standard Time, UTC+02:00)   Comments [1]    

 

 · 

All content © 2008 - 2012, Vadims Podāns
"Spaces" Theme provided by: Vadims Podāns
About


E-mail - Send mail to the author(s)
Live Messenger -
For english language visitors
Библиотека
Календарик
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

Карта расположения посетителей
Favorites





Fan list



Disclaimer
Вся информация на сайте предоставляется на условиях «как есть», без предоставления каких-либо гарантий и прав.

При использовании материалов c данного сайта ссылка на оригинальный источник обязательна.
Protected by Copyscape Online Plagiarism Scanner