Двухфакторная аутентификация в домене с использованием токенов и MS CA

Пароль является не очень надежным средством защиты. Очень часто используются простые, легко подбираемые пароли или же пользователи не особо следят за сохранностью своих паролей (раздают коллегам, пишут на бумажках и т.д.). В Microsoft уже давно реализована технология, позволяющая для входа в систему использовать SmartCard, т.е. аутентифицироваться в системе по сертификату. Но не обязательно использовать непосредственно смарт-карты, ведь для них нужны еще и считыватели, поэтому проще их заменить на usb токены. Они позволят реализовать двухфакторную аутентификацию: первый фактор — это пароль от токена, второй фактор — это сертификат на токене. Далее на примере usb токена JaCarta и домена Windows я расскажу как внедрить этот механизм аутентификации.

Первым делом в AD создадим группу «g_EtokenAdmin» и уч. запись «Enrollment Agent», входящую в эту группу. Эта группа и пользователь будут рулить центром сертификации.

etoken_auth_01

Далее добавим серверу роль AD CA (центр сертификации).

etoken_auth_02

Дополнительно установим Web службу для запроса сертификатов.

etoken_auth_03

Далее выбираем вариант для предприятия. Выбираем Корневой ЦС (если у нас это первый центр сертификации в домене)
Создаем новый закрытый ключ. Длину ключа можно оставить туже, а вот алгоритм хеширования лучше выбрать SHA2 (SHA256).

etoken_auth_04
Введем имя CA и выберем срок действия основного сертификата.
Остальные параметры оставляем по умолчанию и запускаем процесс установки.

etoken_auth_05
После установки зайдем в оснастку центра сертификации и настроим права на шаблоны.
etoken_auth_06

Нас будут интересовать два шаблона: Агент регистрации (Enrollment Agent) и Вход со смарт-картой (Smartcard logon).
Зайдем в свойства этих шаблонов и на вкладке безопасность добавим группу «g_EtokenAdmin» с правами чтение и заявка.

etoken_auth_07

Далее включим эти шаблоны.

etoken_auth_08

И они появятся у нас в общем списке.

etoken_auth_09

Следующим шагом настроим групповые политики:
Первым делом расскажем всем компьютерам домена о корневом центре сертификации, для этого изменим Default Domain Policy.
Конфигурация компьютера -> Политики -> Конфигурация Windows -> Параметры безопасности -> Политики открытого ключа -> Доверенные корневые центры сертификации -> Импорт

etoken_auth_10
Выберем наш корневой сертификат, расположенный по пути: C:\Windows\System32\certsrv\CertEnroll. Закрываем Default Domain Policy.
На следующем шаге создадим политику для контейнера, в котором будут находится компьютеры с аутентификацией по токену (Смарт-карте).

etoken_auth_11

По пути Конфигурация компьютера -> Политики -> Конфигурация Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности. Настроим два параметра «Интерактивный вход в систему: требовать смарт-карту» и  «Интерактивный вход в систему: поведение при извлечении смарт-карты».

etoken_auth_12

На этом с настройками все, теперь можно генерировать клиентский сертификат и проверять аутентификацию по токену.
Залогинемся на компьютере под учетной записью «Enrollment Agent» и откроем браузер, перейдя по ссылке http://Имя_сервера_MS_CA/certsrv

etoken_auth_13

Выбираем пункт Запрос сертификата -> Расширенный запрос сертификата -> Создать и выдать запрос к этому ЦС
Если возникнет ошибка вида «Чтобы завершить подачу заявки на сертификат, следует настроить веб-узел для ЦС на использование проверки подлинности по протоколу HTTPS», то нужно на сервере IIS, на котором установлен MS CA, сделать привязку сайта к протоколу https.

etoken_auth_14
Продолжим получение сертификата, для этого на открывшейся странице выберем шаблон: «Агент регистрации» и нажмем кнопку выдать и установить сертификат.

etoken_auth_15
Теперь пользователь Enrollment Agent может выписывать сертификаты для других пользователей. К примеру запросим сертификат для пользователя test. Для этого откроем консоль управления сертификатами certmgr.msc, т.к. через web интерфейс не получится записать сертификат на usb токен.
В этой консоли на папке личное сделаем запрос от имени другого пользователя

etoken_auth_16
В качестве подписи выбираем единственный сертификат «Enrollment Agent» и переходим к следующему шагу, на котором выбираем пункт «Вход со смарт-картой» и нажимаем подробности для выбора криптопровайдера.
В моем случае я использую токены JaCarta, поэтому вместе с драйверами был установлен криптопровайдер «Athena…»:

etoken_auth_17
На следующем шаге выбираем доменного пользователя, для которого выписываем сертификат и нажимаем на кнопку «Заявка».

etoken_auth_18

Вставляем токен, вводим пин код и начинается процесс генерации. В итоге мы должны увидеть диалоговое окно с надписью «Успешно».
Если процесс окончился неудачно, возможно дело в шаблоне получения сертификата, в моем случае его надо было немного подправить.

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

etoken_auth_19

P.s.
1) Если не работает автоматическая блокировка компьютера или выход из системы, после вытаскивания токена, смотрите запущена ли служба «Политика удаления смарт-карт»
2) На токен можно записать (сгенерировать сертификат) только локально, через RDP не получится.
3) Если не получается запустить процесс генерации сертификата по стандартному шаблону «Вход с смарт-картой», создайте его копию с такими параметрами.

etoken_auth_20

На этом все, если будут вопросы, задавайте, постараюсь помочь.

21 комментарий

  1. Супер! Спасибо большое. Не подскажите где можно прочитать поведение всех галочек и вариантов которые указываются в шаблоне? А то там, столько всего можно выбирать, а как это будет в результате работать, чёрт пойми 🙂

    1. Если версия русская, то примерно понятно, что каждая галочка означает.
      А так могу посоветовать гуглить, по непонятным пунктам. На статью, где детально разбираются эти галочки не натыкался.

      1. Я сейчас тестирую Рутокен (синенький такой), на нём создаётся сертификат. При входе по RDP, сервак мне говорит «запрашиваемый контейнер ключа не существует на этой смарт карте». Интернет ничего внятного на этот счёт не говорит 🙂 На сервере нужно ставить приложение Рутокена (драйвера там, оснастку)? Сервер только развёрнут. 2012R2. Есть идеи?

  2. Добрый день.
    Подскажите, у меня такая проблема, после успешного выпуска агента запроса и установки, пытаюсь выпустить на другого пользователя, но сертификата агента запроса почему-то не видит. В чем может быть проблема? Спасибо.

    1. Если сертификат Агента выпущен на другую учетную запись, отличную от вашей рабочей, то нужно запускать консоль сертификатов от этого пользователя. И уже из неё делать выпуск сертификата «Зарегистрировать от имени…»

      1. Сертификат Агента выпущен на ту же учетную запись, и та же учетная запись запускает консоль.

  3. Гугл не помогает, может каке-нибудь ссылки или напрвления, буду очень благодарен.

  4. Добрый день.

    При генерации сертификата на пользователя в свойствах сертификата «Поставщик шифрования» у меня пусто (ни одного поставщика).
    Я так понимаю, нужен софт для генерации ключа?
    Где Вы брали athena ace card crypto csp?

    Подскажите, пожалуйста.

    1. Добрый день!
      Поставщик шифрования устанавливается вместе с драйверами. Например если используете JaCarta, то нужно её драйвера установить и на клиента, и на сервер.

      1. Добрый день.
        К сожалению, после установки единого клиента JaCarta с поставщиком шифрования, ситуация не изменилась (ссылка на скрин https://drive.google.com/file/d/1Nedleku_a-I0mO3_klr6Mcxmvhru-eRG/view?usp=sharing ). Хотя в шаблонах на сервере данного поставщика видно (можно выбрать как приоритетного).

        У Вас нет предположений, с чем это может быть связано?

        Спасибо.

        1. Странно. Если есть на сервере и выбран в шаблоне, то и на клиенте должен быть, с условием, что на клиенте тоже стоят эти драйвера.

  5. Доброго дня.

    Использую Aktiv RuToken. Сертификаты Агента есть, новые сертификаты для Смарт-карты выписываются нормально, на RuToken сертификат генерируется нормально. Все сертификаты действительны. Вроде все хорошо.

    Но при попытке зайти в систему, пишет «На этой Смарт-карте не найдены действительные сертификаты».

    Куда копать дальше не знаю. По всем мануалам все так просто, но только не у меня 🙂

        1. На всякий случай напишу. КД на Windows 2012 R2, на нем же и собственный CA, который выписывает сертификаты. Корневой сертификат распространен по домену в доверительные. Промежуточных CA нет. Драйвер на RuToken стоит и на сервере и на клиенте.

          Новый сертификат попадает на RuToken, в хранилище выданных сертификатов, и в личные на локальной машине. Сертификат Агента для подписи других сертификатов выписан на меня. Со своей же машины через certmgr.msc я выписываю сертификаты другим пользователям используя регистрацию от имени.

          1. Ну внешне вроде все правильно.
            Может есть какая-то проблема в недоступности списков отзыва сертификатов CRL? И да, проверьте, что везде время одинаковое (CA, AD, ваш ПК).

  6. Да вроде со списками все ОК.

    Состояние отзыва: ОК. Срок действия Следующее обновление

    Время точно до 5 секунд

Добавить комментарий для Сергей Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *