Остальные материалы цикла:
В первой части серии постов про клиентскую аутентификацию при помощи сертификатов мы сделали вброс и поговорили об основных моментах этой темы. Мы поняли, что сертификаты всяко секурней, чем эти ваши пароли (если их правильно приготовить!). В этой части я предлагаю заняться теорией. Долгой, сложной, нудной, но необходимой. Сегодня теория будет состоять из изучения общего принципа работы аутентификации по сертификатам и как это выглядит в общении клиента и сервера.
Когда пользователь аутентифицируется при помощи сертификата на веб-сайте, происходит примерно следующий процесс:
Я посчитал нужным немного развернуть последний пункт, чтобы вы понимали общее устройство этого канала (поскольку, у людей есть некоторые заблуждения на этот счёт):
Немного другой процесс происходит при интерактивном логоне или логоне на сервер терминалов посредством Remote Desktop при помощи смарт-карты.
Интерактивная аутентификация в Active Directory по сертификату не является самостоятельным механизмом. Как и всегда, основной протокол аутентификации в домене — Kerberos. Чтобы обеспечить взаимодействие между аутентификацией по смарт-карте и Керберосом, применяется нехитрый протокол PKINIT. PKINIT, в свою очередь, является лишь надстройкой над керберосом (или расширением протокола). Вот как он примерно работает:
Примечание: если у пользователя уже есть соответствующий сервисный тикет (TGS), выполняются только шаги 5 и 6.
В принципе, вот как примерно (на достаточно высоком уровне) происходит клиентская аутентификация по сертификату. Кое что я опустил (что нам не столь актуально в рамках рассматриваемой статьи), но кое что мы будем более плотно рассматривать в следующих статьях — например, маппинг сертификатов (ассоциация или сопоставление сертификата с учётной записью в Active Directory).
На последок, особо пытливым умам — увлекательное чтиво:
Вадимс, Годные статьи! Я сичтаю, что если уж объяснять "в деталях", то нужно объяснять, почему происходит именно так. Ну, например, вот ты говоришь, что "<...> именно поэтому, при использовании смарт-карты для логона, сервер KDC должен иметь свой собственный сертификат", но не объясняешь, почему. Я бы объяснил, что при использовании хеша парольного аутентификатора, клиент доверяет KDC на основании того, что KDC обладает хешем пароля пользователя, а при аутентификации по СОК клиент основывает доверие на доверии к сертификату, представленному KDC. И еще. Вот ты пишешь "учётные данные для аутентификации при помощи NTLM". Мало кто поймет суть этого трюка. Расскажи подробне людям о "поддержке" NTLM при PKCA, про "трюк", когда KDC перенаправляет в PACе пользователю "по требованию" хеши паролей, ассоциированные с его учетной записью. А то существует заблуждение, что если пароль не участвует, то и хешам пароля для поддержки NTLM неоткуда взяться, а меж тем, все на ресурсы "по IP адресу" доступаются после PKCA. :))
я же описал основные факторы, которые увеличивают время логона смарт-картой. На счёт сертификата KDC, там во-первых, происходит обоюдная аутентификация и во-вторых, KDC свой ответ тоже подписывает сертификатом. Я не посчитал нужным рассказывать про учётные данные NTLM, потому что он никак не будет влиять на рассматриваемую тему. Достаточно знать, что у пользователя будет пакет учётных данных NTLM, которые он сможет использовать для ресурсов, не поддерживающих керберос (или где не используется NTLM). В таком случае пришлось бы рассказывать, почему при обращении к ресурсу по IP, а не по имени используется не керберос, а NTLM. Мне кажется, что знание этого факта уже само по себе достаточно. Опять же, я не ставил целью рассказать работу PKCA (равно, как и кербероса) в деталях, а лишь осветить наиболее важные моменты. Хотя, согласен, такое заблуждение существует (что при логоне смарт-картой никаких NTLM не бывает).
Но всё равно, спасибо за замечание.
Согласен с тобой, что смежные темы раскрывать не нужно. Почитал первую часть. Ты не все указал, что может в сертификате указываться в качестве "указателя" на объект пользователя. Распознается кроме UPN и DN еще RFC-emailaddress и серийный номер сертификата. Этот процесс обзывается, Account Binding, кажется... Дополни, если это так.
Встряну в разговор гур, т.к. хоть и не являюсь специалистом по PKI, тема имеет ко мне непосредственное отношение. Вопросов два: 1. Вадимс, ты пишешь: "5.Клиент посылает на сервер публичную часть своего сертификата и некоторый объём подписанных клиентским сертификатом данных...". Внимание вопрос: что именно имеется ввиду под "некоторым объемом данных"? Это какая-то служебная информация (тип клиента, таймстамп и прочая, прочая, прочая) или рандомный набор символов? А может это отрывок из любимого произведения данного конкретного пользователя? 2. У меня карие глаза, если что, и вообще за использование Registred Trademark "Oleg Krylov" неплохо было бы отчислений каких-то :)
Набрался смелости и решил задать вопрос :). Как именно сервер (на данной схеме обозначен как Web Server in the Cloud) определяет членство пользователя в группах безопасности AD? Я так понял, что список SID'ов групп, членами которых данный юзер является, находится в каком-то из токенов (TGT и/или TGS). Не могли бы вы пояснить этот момент?
> Это какая-то служебная информация (тип клиента, таймстамп и прочая, прочая, прочая) она самая. Как в обычном керберосе. > и вообще за использование Registred Trademark "Oleg Krylov" неплохо было бы отчислений каких-то :) все персонажи в статье вымышлены и любое совпадение с реальными лицами — чисто случайность. > определяет членство пользователя в группах безопасности AD? при помощи TGS, который вкладывается в AP-REQ.
"происходит уже обоюдная аутентификация сервера и клиента" - далеко не факт. Обоюдная аутентификация происходит всегда только между клиентом и контроллером домена, а между сервисом и клиентом - это уже опционально, ибо сертификат при получении TGS уже не используется.
Вадимс, а какое ограничение по количеству входов по сертификату на компьютер пользователя при отсутствии соединения с контроллером домена? Если есть, то где и как это можно настроить?
Не думаю, чтобы я встречал такую настройку.
Вадимс, а вообще ограничение есть и какое оно (если есть)?
Не в курсе даже. Знаю, что есть ограничение, что кэшируется только последняя смарт-карта, которая использовалась при последнем онлайн логоне.
Comments: