Contents of this directory is archived and no longer updated.

Posts on this page:

Этим постом я подвожу итоги эпик-проповеди в 6 частях, посвящённой такой занимательной теме как Certificate Autoenrollment. Это достаточно популярная технология, которая позволяет автоматически подавать заявки на получение сертифкатов, что значительно снижает нагрузку на пользователей и администраторов. Хоть эта технология и популярна, её принципы работы в деталях далеко не всем известны, а некоторые моменты даже не освещены в библиотеке TechNet. И вот что у нас есть на текущий момент:

Вводная часть, которая описывает основные компоненты автоэнроллмента и требования к нему.

Данный пост раскрывает основные особенности шаблонов версии 1 и работу механизма Automatic Certificate Request (ACR).

Здесь рассказывается о шаблонах версии 2 и 3, включая описание каждого свойства шаблона и его влияния на работу механизма автоэнроллмента.

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

С выходом Windows 7/Windows Server 2008 R2 у нас появляются новые механизмы энроллмента сертификатов, которые значительно расширяют возможности и удобство распространения сертификатов.

И, собственно, описание принципа и порядка работы клиентов Windows 7/Windows Server 2008 R2 с новыми механизмами XCEP/WSTEP как в доменной, так и не в доменной среде.

Enjoy, greetings!

Примечание: материал данной статьи относится только к клиентам под управлении Windows 7/Server 2008 R2 или выше.

Ссылки на другие материалы из этой серии:

В предыдущей части мы кратко просмотрели назначение новых протоколов [MS-XCEP] и [MS-WSTEP], которые позволяют автоматически подавать заявки на сертификаты без непосредственного подключения к домену. Сегодня мы посмотрим порядок работы клиента автоэнроллмента с этими протоколами.

Примечание: для недоменных клиентов доступна возможность использования только автоэнроллмента. ACR (Automatic Certificate Request) для не поддерживается.

Group Policy configuration

После установки службы CEP у вас появляется адрес HTTP, который указывает на сервер CEP и этот адрес имеет вид:

https://www.example.com/ADPolicyProvider_CEP_auth_protocol/service.svc/CEP

где auth_protocol указывает на протокол аутентификации клиента на сервере CEP. Это может быть Kerberos (только для доменных клиентов), Password или Certificate. Вот этот адрес нужно добавить в настройки групповой политики. Для этого откройте редактор групповой политики (gpmc.msc или gpedit.msc для недоменных машин) и в секции: Computer Configurtion\Windows Settings\Security Settings\Public Key Policies настроить параметр Certificate Services Client — Certificate Enrollment Policy. В свойствах следует включить эту политику и вы увидите окно Certificate Enrollment Policy list и в котором уже одна политика будет определена. Предопределённую политику следует удалить совсем и кнопкой Add добавить новую. В открывшемся окне вставить эту ссылку, указать нужный тип аутентификации и нажать Validate. В результате вы должны получить нечто вроде такого:

CEP URL validationfig.1

Если вам это удалось сделать, значит клиент смог успешно пообщаться с сервером XCEP и CES. Причём, вы увидите, что клиент по этой ссылке смог найти название данной политики и вставить её в окошко:

CEP policy collection

fig.2

И таким образом вы можете добавлять несколько различных адресов политик, которые могут относиться к различным организациям. Причём, организация может развернуть несколько серверов XCEP для обеспечения высокой доступности, тогда вы можете добавлять несколько адресов серверов CEP и они будут линковаться к одной политике.

Следует чётко понимать, что на предыдущей картинке вы видите коллекцию серверов CEP (Policy collection). Каждое имя уникально идентифицирует политику, которая может поддерживаться несколькими серверами CEP. Чтобы посмотреть сколько серверов CEP обслуживают ту или иную политику, выделите нужную политику и нажмите Properties. В результате вы увидите нечто похожее на это:

CEP collection policy server list

fig.3

Уникальность политики определяется по её GUID'у. В этом окне может формироваться список всех серверов CEP, которые обслуживают одну и ту же политику (с одинаковым GUID'ом). По умолчанию для всех политик включается разрешение автоэнроллмента.

Примечание: галочка Enable for automatic enrollment and renewal не является самодостаточной и зависит от классической политики автоэнроллмента. Если автоэнроллмент отключен, то соответственно, автоматическая подача заявок на сертификаты производиться не будет.

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

  • создать новый объект групповой политики или отредактировать существующую политику по адресу:
    Computer Configuration –> Windows Settings –> Security Settings –> Public Key Policies –> Certificate Services Client — Autoenrollment
    данный элемент политики следует установить в состояние Enabled, поставить галочку Update certificates that use certificate templates и при необходимости выбрать автоматическое обновление просроченных сертификатов и удалении отозванных сертификатов из хранилища.
  • Те же параметры настраиваются и в секции User Configuration, чтобы обеспечить автоматическое распространение пользовательских сертификатов. Это могут быть сертификаты EFS, подписи электронной почты или сертификаты для аутентификации пользователей:
    User Configuration –> Windows Settings –> Security Settings –> Public Key Policies –> Certificate Services Client — Autoenrollment
  • прилинкуйте созданную или отредактированную политику к нужному OU (чаще всего её применяют для всего домена).

Примечание: для успешного энроллмента сертификатов на основе новых шаблонов (для которых у клиента ещё нет ни одного сертификата) галочка Update certificates that use certificate templates обязательна!

В общем смысле, новый автоэнроллмент работает примерно так:

Autoenrollment behavior using XCEP/WSTEPfig.4

Client behavior

Примечание: по причине громоздкости текста, я не буду приводить содержание ответа сервера XCEP. Но его cтруктуру можно увидеть в  §4.1.1.2 (GetPoliciesResponse Response) документа [MS-XCEP]. Поэтому я буду подразумевать, что вы ознакомились с его примерным содержанием.

Когда срабатывает триггер автоэнроллмента, клиент считывает параметры из реестра:

  • HKLM\SOFTWARE\Policies\Microsoft\Cryptography\Autoenrollment
  • HKCU\SOFTWARE\Policies\Microsoft\Cryptography\Autoenrollment

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

  • HKLM\SOFTWARE\Policies\Microsoft\Cryptography\PolicyServers
  • HKCU\SOFTWARE\Policies\Microsoft\Cryptography\PolicyServers

Данные ключи будут содержать подключи политик. Каждому подключу политики присваивается уникальный GUID и внутри него будет содержаться необходимая информация о каждой политике, как URI, метод аутентификации, «стоимость» политики и флаги автоэнроллмента. После этого происходит сортировка политик по следующим правилам:

  • сортируются по «стоимости» политики. Политика с меньшей стоимостью будет более приоритетной и политика с большей стоимостью будет менее приоритетной, соответственно. Если 2 и более политик имеют одинаковую стоимость, то идёт второй уровень сортировок по методу аутентификации (в порядке приоритета):
    • используется аутентификация Kerberos;
    • используется анонимная аутентификация;
    • остальные политики используются в том порядке, в каком они записаны в реестре.

Когда политики отсортированы, клиент подключается к серверу XCEP из каждой политики по HTTPS. Если по какой-то ссылке не удаётся подключиться или сервер возвращает ошибку (SOAP), клиент переходит к следующей ссылке. Если в ответ получены политики, клиент извлекает следующие параметры:

  • адрес или адреса серверов CES;
  • список серверов CA, на работу с которыми настроен сервер CES. Один сервер CES должен быть настроен на работу с неболее, чем одним сервером CA;
  • список шаблонов и их параметры.

Pended request processing

Как и в случае с ACR, клиент после всех подготовительных процедур пытается получить сертификаты в ответ на запросы. Как мы уже знаем, запросы хранятся в контейнере Certificate Enrollment Requests. Сперва клиент удаляет все запросы, которые старше 60 дней, а затем посылает запрос на CES для выяснения статуса каждого запроса. Если в ответ на запрос был получен сертификат, то он помещается в список ToBeAdded. Если статус запроса Denied, то запрос удаляется. Если статус неизвестен, клиент переходит к следующему запросу.

Certificate update and enrollment

После обработки всех ожидающих запросов, клиент проверяет статус каждого существующего сертификата. Если сертификат отозван или его срок истёк, он помещается в список ToBeDeleted.

Примечание: просроченные сертификаты будут помещены в этот список только если в групповой политике выставлен флаг Renew expired certificates, update pending certificates, and remove revoked certificates и сертификат не используется для шифрования.

Если срок действия сертификата преодолел отметку 80% и шаблон этого сертификата находится в списке доступных шаблонов (который был получен после нескольких уровней фильтрации в предыдущих шагах), клиент отправляет запрос на обновление сертификата. При этом запрос подписывается текущим сертификатом. Если в реестре для текущего сертификата указан PolicyID, клиент будет пытаться найти тот же ID в списке политик CEP и запрос на обновление сертификата отправлять на сервер CES, который указан в политике. Если PolicyID для текущего сертификата не указан, то запрос будет отправляться на тот сервер CES, политика которого является по умолчанию (см fig.2). Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded и записывает PolicyID, который использовался при энроллменте. Этот ID будет использоваться при обновлении сертификата.

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

Примечание: здесь и далее. Если необходимый шаблон находится в выдаче более одного CA, клиент по очереди посылает запрос на каждый сервер CES в соответствии с их сортировкой.

Если версия шаблона (Major Version), который использовался при предыдущем энроллменте отличается от текущего Major Version шаблона, клиент посылает запрос на обновление сертификата. При этом запрос подписывается текущим сертификатом. Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded.

Примечание: при каждом редактировании шаблона (кроме вкладки Security) изменяется только Minor Version. И держатели сертификатов этого шаблона не увидят, что шаблон изменён, поскольку они проверяют только Major Version. В случае, если после внесения изменений в шаблон необходимо переиздать все сертификаты этого шаблона, администратор должен изменить Major Version. Для этого администратор в оснастке certtmpl.msc должен выбарть нужный шаблон, нажать правой кнопкой и выбарть Reenroll All Certificate Holders. Этот шаг изменит Major Version шаблона и все клиенты, которые уже имеют сертификат данного шаблона его обновят, получив новый сертификат с новыми изменениями.

Если шаблон, который использовался при предыдущем энроллменте был заменён более новым (вкладка Superseded Templates нового шаблона содержит устаревший шаблон), клиент отправляет запрос на обновление сертификата. При этом запрос подписывается текущим сертификатом. Если в реестре для текущего сертификата указан PolicyID, клиент будет пытаться найти тот же ID в списке политик CEP и запрос на обновление сертификата отправлять на сервер CES, который указан в политике. Если PolicyID для текущего сертификата не указан, запрос будет отправляться на тот сервер CES, политика которого является по умолчанию (см fig.2). Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded и записывает PolicyID, который использовался при энроллменте. Этот ID будет использоваться при обновлении сертификата.

Для необработанных шаблонов клиент отправляет запросы на получение сертификатов на основе этих шаблонов.Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded и записывает PolicyID, который использовался при энроллменте. Этот ID будет использоваться при обновлении сертификата.

Когда все запросы, сертификаты и шаблоны были обработаны, триггер автоэнроллмента очищает список ToBeDeleted и все сертификаты из списка ToBeAdded копирует в контейнер Personal.

Epilogue

Вот, вроде и всё. На этом я завершаю цикл статей, посвящённых Certificate Autoenrollment во всех его вариациях и с рассказом о новых возможностях Windows 7 и Windows Server 2008 R2. Рассказал как умел и, мне кажется, материал получился достаточно исчерпывающим и у читателя должно появиться понимание принципа работы всех внутренних механизмов. Если что-то осталось непонятным или появились вопросы — комментарии внизу :)

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

Update 30.05.2012: исправлен процесс получения шаблонов CA.


Ссылки на другие материалы из этой серии:

Windows Client Certificate Enrollment (WCCE)

В предыдущих частях мы рассмотрели принципы работы autoenrollment'а, который возможен только в доменной среде. Это значит, что для осуществления этой задачи мы должны иметь как минимум:

  • Контейнер в AD с информацией о шаблонах сертификатов. CA локально не хранит сами шаблоны, а хранятся они только в AD;
  • Контейнер в AD с информацией о выдающих Enterprise CA (Issuing CA).

Я считаю, что следует ещё раз ознакомиться о порядке энроллмента сертификатов в домене из оснастки Certificates консоли MMC:

  1. Клиент инициализирует необходимые COM интерфейсы для CryptoAPI;
  2. Используя LDAP получает список всех доступных в лесу шаблонов сертификатов;
  3. Используя LDAP получает список всех доступных в лесу Enterprise CA. Именно по этой причине Enterprise CA не могут существовать вне домена Active Directory, поскольку Active Directory используется для их обнаружения и хранения шаблонов;
  4. Используя LDAP получает список доступных шаблонов CA;
  5. На данном этапе клиент в окне MMC отображает список шаблонов, которые вы можете выбирать;
  6. Вы вибираете нужный шаблон и клиент используя множество COM интерфейсов. Пример их использования можете посмотреть в следующем посте: Generating a certificate (self-signed) using powershell and CertEnroll interfaces;
  7. Когда запрос подготовлен, клиент подключается к DCOM интерфейсу ICertRequest::Submit() сервера CA и отправляет этот запрос на сервер.
  8. После отправки запроса на сервер, клиент через тот же интерфейс получает статус своего запроса.

Примечание: более подробно все эти CryptoAPI DCOM интерфейсы описаны в спецификациях протокола [MS-WCCE].

Как вы можете видеть, этим мы зажаты доменом Active Directory, поскольку без него не можем найти ни один Enterprise CA и не можем получить список доступных шаблонов. Другая проблема — непосредственное подключение к CryptoAPI DCOM интерфейсам сервера CA, что не очень хорошо сказывается на безопасности.

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

Windows Client Certificate (WCCE) protocol limitations 

X.509 Certificate Enrollment Policy (XCEP)

С выходом Windows 7 и Windows Server 2008 R2 мы имеем возможность как минимум частично разбить эти границы и получить более эффективную и пластичную инфраструктуру. Если предыдущая схема предполагает непосредственное подключение клиента к серверу CA, при использовании XCEP у нас появляется дополнительный промежуточный элемент — CEP (Certificate Enrollment Policy) Server. Данный сервер освобождает клиента от необходимости непосредственной связи с Active Directory и с серверами CA. В грубом представлении это выглядит примерно так:

Certificate Enrollment Policy Server

При включениии сервера политик XCEP, он читает из Active Directory всю необходимую информацию и хранит её у себя. При этом XCEP использует стандартные механизмы общения с Active Directory, как это раньше делал клиент. На сервере XCEP работает веб-приложение, которое позволяет клиентам подключаться к нему по HTTP. Это означает, что для выполнения шагов 2 и 3 (см. последовательность работы клиента при использовании протокола WCCE) клиенту совсем не обязательно иметь прямое подключение к Active Directory, но достаточно только знать HTTP-адрес сервера XCEP. Если это кому-то интересно, скажу, что клиент и XCEP используют XML сообщения.

Примечание: HTTP здесь указан только для обозначения типа протокола. В действительности XCEP использует только HTTPS, поскольку протокол [MS-XCEP] не предусматривает защиту передаваемых данных как их шифрование и/или подпись. Для решения этих задач используется HTTPS-транспорт.

Из этого следует, что CEP политики может получать даже недоменный клиент или член другого леса. Протокол [MS-XCEP] использует различные схемы XML, которые содержат всю необходимую информацию:

  • Список шаблонов и их настройки;
  • Все используемые OID'ы для использования нестандартных политик выдачи или политики применения ключа (EKU);
  • Список и адреса серверов CA, которые позволяют.

И эти данные клиент использует для подготовки и отправки запроса на сервер CA.

WS-Trust X.509v3 Token Enrollment Extensions (WSTEP)

В предыдущем разделе мы узнали о сути сервера XCEP, который позволяет даже недоменным клиентам и/или клиентам чужого леса получать политики энроллмента. Скажем, наш клиент находится в рабочей группе и по HTTPS получил всю необходимую информацию и уже готов отправлять запросы на получение сертификатов. Но, как мы знаем, при энроллменте клиент использует прямое подключение к DCOM сервера CA. Понятное дело, что никто выставлять сервер CA с открытым DCOM в интернет не будет. Как запрашивать сертификаты? А очень просто — по той же самой логике, как и с сервером XCEP у нас появляется ещё один (независимый от XCEP) промежуточный элемент — CES (Certiicate Enrollment Service) Server. В грубом представлении картинка будет выглядеть примерно так:

Certificate Enrollment Service

Клиент из политики, которую получил от XCEP, выбирает HTTP URL нужного сервера CA и начинает собирать запрос. После чего запаковывает всё в XML и по HTTPS отправляет запрос на сервер CES. CES в свою очередь обрабатывает полученный запрос, расшивает XML и уже классическим методом (через DCOM) пересылает запрос на сервер CA и получает от него ответ. Этот ответ CES перенаправляет клиенту снова в XML формате. По сути CES только проксирует запросы клиента, трансформируя их из XML в DCOM и ответы из DCOM в XML.

Примечание: по причине отсутствия в протоколе механизма шифрования и/или подписи передаваемых данных, между клиентом и CES используется HTTPS-транспорт.

Для улучшения понимания предлагаю простую картинку:

Simple XCEP/CES communications

На данной картинке сервер getcerts.contoso.com является одновременно и сервером XCEP и CES. XCEP считывает настройки энроллмента для текущего леса из Active Directory с использованием стандартного LDAP. Клиент получает эту информацию с использованием XML over HTTPS. По тому же XML over HTTPS отправляет запрос службе CES, которая с использованием стандартного DCOM общается с Entrprise CA и транслирует (проксирует) ответы обратно клиенту. Может быть следующая картинка даст более понятное представление об этом непростом механизме:

Extended XCEP/CES scenario

На этой схеме в DMZ расположены RODC (Read-Only Domain Controller), сервер XCEP и CES. В корпоративную сеть из DMZ у нас разрешены только DCOM сообщения и только до Enteprise CA. А из DMZ в интернет доступен только HTTPS. Это достаточно безопасная и удобная схема, когда клиент из интернета может энролить сертификаты только с использованием HTTPS.

Можно задать резонный вопрос: а как сделать все эти XCEP и CES? Существует достаточно детальный документ, который описывает установку и настройку XCEP/CES: Certificate Enrollment Web Services in Windows Server 2008 R2.

В следующий раз мы посмотрим как работает автоэнроллмент при использовании XCEP/CES.

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

Update 25.01.2010: добавлено обязательное включение галочки Update certificates that use certificate templates.


Ссылки на другие материалы из этой серии:

Продолжаем тему автоэнроллмента и сегодня рассмотрим принцип т.н. «классической» модели автоматической подачи заявок на сертификаты. Данная модель поддерживается клиентами начиная с Windows XP и которые являются членами домена Active Directory.

Group Policy settings

Как и в случае с Automatic Certificate Request (ACR), триггер автоэнроллмента устанавливается в групповых. Для его установки необходимо в редакторе групповой политики выключить следующие опции:

  • в оснастке CertSrv.msc любого Enterprise CA в секции Certificate Templates убедиться, что в списке присутствует нужный шаблон версии 2 или 3. Если нет, то All Tasks –> New –> Certificate Template to issue и добавить шаблон;
  • в редакторе групповой политики (Group Policy Management) создать новый объект групповой политики или отредактировать существующую политику по адресу:
    Computer Configuration –> Windows Settings –> Security Settings –> Public Key Policies –> Certificate Services Client — Autoenrollment
    данный элемент политики следует установить в состояние Enabled, поставить галочку Update certificates that use certificate templates и при необходимости выбрать автоматическое обновление просроченных сертификатов и удалении отозванных сертификатов из хранилища.
  • Те же параметры настраиваются и в секции User Configuration, чтобы обеспечить автоматическое распространение пользовательских сертификатов. Это могут быть сертификаты EFS, подписи электронной почты или сертификаты для аутентификации пользователей:
    User Configuration –> Windows Settings –> Security Settings –> Public Key Policies –> Certificate Services Client — Autoenrollment
  • прилинкуйте созданную или отредактированную политику к нужному OU (чаще всего её применяют для всего домена).

Примечание: для успешного энроллмента сертификатов на основе новых шаблонов (для которых у клиента ещё нет ни одного сертификата) галочка Update certificates that use certificate templates обязательна!

В общем смысле, автоэнроллмент работает примерно так:

Autoenrollment behavior

Но дальше мы рассмотрим весь этот процесс более подробно.

Client bahavior

Когда срабатывает триггер автоэнроллмента, клиент считывает параметры из реестра:

  • HKLM\SOFTWARE\Policies\Microsoft\Cryptography\Autoenrollment
  • HKCU\SOFTWARE\Policies\Microsoft\Cryptography\Autoenrollment

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

  • сертификаты CA из контейнера по адресу:
    CN=AIA, CN=Public Key Services, CN=Services, CN=Configuration, DC=ForestRootDomain
  • сертификаты корневых CA из контейнера по адресу:
    CN=Certification Authorities, CN=Public Key Services, CN=Services, CN=Configuration, DC=ForestRootDomain
  • сертификаты агентов восстановления из контейнера по адресу:
    CN=KRA, CN=Public Key Services, CN=Services, CN=Configuration, DC=ForestRootDomain
  • сертификаты CA, которые могут издавать сертификаты для аутентификации по Kerberos из записи NTAuthCertificates по адресу:
    CN=Public Key Services, CN=Services, CN=Configuration, DC=ForestRootDomain

На основе этих сертификатов, клиент обновляет свои локальные хранилища. Далее, считываются все шаблоны и сведения об Enterprise CA из следующих контейнеров:

  • CN=Certificate Templates, CN=Public Key Services, CN=Services, CN=Configuration, DC=ForestRootDomain
  • CN=Enrollment Services, CN=Public Key Services, CN=Services, CN=Configuration, DC=ForestRootDomain

После чего клиент считывает сертификаты из контейнера Personal и помещает их в процессинговый список, а так же генерирует списки ToBeAdded и ToBeDeleted. В эти списки попадут все сертификаты, которые будут добавлены к локальному хранилищу и удалены из него, соответственно.

Примечание: в процессинговый список попадают только сертификаты основанные на шаблонах. Например, самоподписанные сертификаты EFS не попадают в этот список.

Certificate template sorting

И вот здесь начинается процесс организации порядка обработки сертификатов. Клиент из полученных шаблонов сертификатов выбирает только те, на которые у пользователя или компьютера (в зависимости от контекста) есть все права: Read, Enroll и Autoenroll. Если же хоть одного права не хватает, то шаблон исключается из списка. Для оставшихся шаблонов проверяется содержимое Superseded Templates. Как я уже говорил в предыдущей части, любой шаблон версии 2 или 3 может заменять устаревший шаблон. Например, новый шаблон Advanced EFS может заменять шаблон Basic EFS. В таком случае шаблон Advanced EFS считается более новым и все держатели сертификатов шаблона Basic EFS получат новый сертификат шаблона Advanced EFS. Поскольку список Superseded Templates содержит устаревшие и неиспользуемые более шаблоны, то они так же исключаются из списка. Следующим этапом исключаются шаблоны, в настройках которых содержится:

  • число This Number Of Authorized Signatures (во вкладке Issuance Requirements) больше 1;
  • выставлен чек-бокс Supply in the request (во вкладке Subject name);
  • выставлен чек-бокс Prompt the user during enrollment (во вкладке Request handling компьютерных шаблонов).

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

Когда шаблоны сертификатов отсортированы, клиент обрабатывает список Enterprise CA. Их записи в Active Directory содержат достаточно информации, чтобы клиент мог их найти. Получив список Enterprise CA в текущем лесу, клиент проверяет сертификат каждого CA. Если цепочка какого-то CA не может быть построена, недоверена или какой-то элемент цепочки был отозван, то такой CA исключается из списка. Клиент может использовать только доверенные CA для формирования запроса и получения сертификатов.

После составления списка всех пригодных Enterprise CA, клиент обращается к каждому из них и получает список шаблонов, на основании которых CA может издавать сертификаты. Здесь клиент делает последний процесс сортировки шаблонов, которые будут обработаны. Все шаблоны, которые не находятся в выдаче хотя бы одного CA, удаляются из списка. Таким образом фильтр обеспечивает, что каждый шаблон может быть обработан потому что он содержит правильные настройки, разрешения и находится в выдаче хотя бы одного CA.

Pended request processing

Как и в случае с ACR, клиент после всех подготовительных процедур пытается получить сертификаты в ответ на запросы. Как мы уже знаем, запросы хранятся в контейнере Certificate Enrollment Requests. Сперва клиент удаляет все запросы, которые старше 60 дней, а затем посылает запрос на CA для выяснения статуса каждого запроса. Если в ответ на запрос был получен сертификат, то он помещается в список ToBeAdded. Если статус запроса Denied, то запрос удаляется. Если статус неизвестен, клиент переходит к следующему запросу.

Certificate update and enrollment

После обработки всех ожидающих запросов, клиент проверяет статус каждого существующего сертификата. Если сертификат отозван или его срок истёк, он помещается в список ToBeDeleted.

Примечание: просроченные сертификаты будут помещены в этот список только если в групповой политике выставлен флаг Renew expired certificates, update pending certificates, and remove revoked certificates и сертификат не используется для шифрования.

Если срок действия сертификата преодолел отметку 80% и шаблон этого сертификата находится в списке доступных шаблонов (который был получен после нескольких уровней фильтрации в предыдущих шагах), клиент отправляет запрос на обновление сертификата. При этом запрос подписывается текущим сертификатом. Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded.

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

Примечание: здесь и далее. Если необходимый шаблон находится в выдаче более одного CA, клиент рандомно выбирает CA которому будет отправлен запрос. Если CA вернул ошибку или недоступен, клиент выбирает другой CA, который может выпускать сертификаты на основе конкретного шаблона.

Если версия шаблона (Major Version), который использовался при предыдущем энроллменте отличается от текущего Major Version шаблона, клиент посылает запрос на обновление сертификата. При этом запрос подписывается текущим сертификатом. Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded.

Примечание: при каждом редактировании шаблона (кроме вкладки Security) изменяется только Minor Version. И держатели сертификатов этого шаблона не увидят, что шаблон изменён, поскольку они проверяют только Major Version. В случае, если после внесения изменений в шаблон необходимо переиздать все сертификаты этого шаблона, администратор должен изменить Major Version. Для этого администратор в оснастке certtmpl.msc должен выбарть нужный шаблон, нажать правой кнопкой и выбарть Reenroll All Certificate Holders. Этот шаг изменит Major Version шаблона и все клиенты, которые уже имеют сертификат данного шаблона его обновят, получив новый сертификат с новыми изменениями.

Если шаблон, который использовался при предыдущем энроллменте был заменён более новым (вкладка Superseded Templates нового шаблона содержит устаревший шаблон), клиент отправляет запрос на обновление сертификата. При этом запрос подписывается текущим сертификатом. Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded.

Для необработанных шаблонов клиент отправляет запросы на получение сертификатов на основе этих шаблона. Если в ответ на запрос был получен сертификат, клиент помещает его в список ToBeAdded.

Epilogue

Когда все запросы, сертификаты и шаблоны были обработаны, триггер автоэнроллмента очищает список ToBeDeleted и все сертификаты из списка ToBeAdded копирует в контейнер Personal.

Как вы видите, процесс автоэнроллмента в очень степени похож на процесс Automatic Certificate Request и отличается лишь дополнительными шагами обработки шаблонов версии 2 и 3.

Что дальше?

В этой и предыдущих частях мы рассмотрели основные концепции и особенности работы Automatic Certificate Request и autoenrollment'а при использовании протокола MS-WCCE, основанном на DCOM сообщениях. В следующей части будет рассмотрена концепция и порядок работы автоэнроллмента с использованием более нового набора протоколов: MS-XCEP и MS-WSTEP/WS-TRUST, которые значительно расширяют наши возможности управления сертификатами.

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

Ссылки на другие материалы из этой серии:

Preamble

В предыдущих материалах мы ознакомились с шаблонами версии 1 и достаточно простым методом автоэнроллмента — Automatic Certificate Request (ACR). Этот метод достаточно прост и позволяет автоматически распространять сертификаты на основе шаблонов версии 1 и поддерживается серверами CA под управлением любой версии ОС, начиная с Windows 2000. Эта простота, в свою очередь, выливается в соответствующую функциональность. Это значит, что мы таким образом можем распространять сертификаты только для компьютеров. И можем использовать только те шаблоны, которые поставляются с ролью CA. Мы не имеем возможности изменять эти шаблоны, поэтому приходится использовать как есть. Хотя, в ряде случаев этого бывает достаточно. Например, шаблон Computer очень часто удовлетворяет требованиям для компьютерных сертификатов общего назначения. Однако, часто этого бывает недостаточно, особенно не хватает возможности автоматического распространения сертификатов пользователям. Для решения этой и не только задачи мы можем использовать шаблоны версии 2 и 3 и классический автоэнроллмент.

Примечание: чтобы узнать какие операционные системы поддерживают шаблоны версии 2 и 3, ознакомьтесь с обеими таблицами, приведённвми в первой части материала.

V2/V3 Templates

Примечание: хоть шаблоны версии 3 немного отличаются от шаблонов версии 2, я не буду ничего говорить отдельно по ним, поскольку в контексте автоэнроллмента эти шаблоны никаких изменений не содержат и все особенности присущие шаблонам версии 2 для новой версии шаблона так же действительны. За дополнительными сведениями по шаблонам обратитесь по ссылке в конце поста.

Шаблоны версии 2 и 3 уже являются управляемыми и их можно очень гибко конфигурировать:

Version 2 template  Version 2 template

Безусловно, возможность настраивать шаблоны резко усложняет понимание и управление процессом. В этой части я планирую только показать настройки шаблонов и какие настройки несовместимы с автоэнроллментом.

Вкладка General

  • Template display name — отображаемое имя шаблона. Используется для удобства распознавания шаблона пользователем.
  • Template name — это уже внутреннее имя шаблона по которому учётные записи и службы находят шаблоны.
  • Validity period — устанавливает срок действия сертификата на основе конкретного шаблона.

Примечание: срок действия сертификата может быть ограничен не только этой настройкой. В действительности принимается во внимание ещё остаточный срок действия сертификата самого сервера CA и значение реестра на сервере CA по адресу: HKLM\System\CurrentControlSet\ Services\CertSvc\Configuration\<CA sanitized name> и значения Validity period и Validity period units. Наименьшее из трёх значений будет определять реальнй срок действия сертификатов.

  • Renewal period — указывает срок за который до окончания действия сертификата, механизм автоэнроллмента будет пробовать обновить сертификат.

Примечание: данная опция используется только при активной политике автоэнроллмента и в остальных случаях игнорируется. Так же следует учитывать, что этот срок не является абсолютным. Есть ещё предустановленное значение, которое равно 80% от срока действия сертификата. Это означает, что триггер автоэнролмента будет будет пытаться обновить сертификат либо по истечении 80% (т.е. за 20% до конца) срока действия сертификата или значения этой опции. В итоге выбирается то значение, которое больше (иными словами, срабатывает раньше). По умолчанию 6 недель для срока действия в 1 год составляет эти самые 20% до срока окончания сертификата.

  • Publish certificate in Active Directory — публикует сертификат в свойствах учётной записи пользователя или компьютера. Публикация полезна, когда кто-то будет использовать сертификат конкретного пользователя. Например, при предоставлении общего доступа к шифрованным файлам или для шифрования почты, сертификаты других пользователей должны быть опубликованы в Active Directory.
  • Do not automatically reenroll if a duplicate certificate exist in Active Directory — инструктирует клиента автоэнроллмента не запрашивать новые сертификаты на основе текущего шаблона, если действующий сертификат уже существует в свойствах учётной записи в AD. В случае использования перемещаемых пользователей и/или частого перемещения пользователя между компьютерами эта опция позволяет не плодить большое количество сертификатов на основе одинакового шаблона. Работает только при использовании предыдущей опции. В остальных случаях игнорируется. Следует учитывать, что массовая публикация сертификатов в AD может значительно увеличить объём реплицируемых данных между контроллерами доменов.
  • For automatic renewal of smart card certificates, use the existing private key if a new key cannot be created — позволяет смарт-карте использовать существущий закрытый ключ при обновлении сертификата на ней. При нехватке свободного места на смарт-карте может оказаться, что записать новую пару ключей некуда и энроллмент закончится неудачей. Данную опцию рекомендуется включать для шаблонов, которые используют CSP смарт-карт.

Вкладка Request Handling

  • Purpose — указывает целевое назначение закрытого ключа данного шаблона. Это может быть цифровая подпись, шифрование, или оба значения, а так же использование для смарт-карт.
  • Delete revoked or expired certificate — инструктирует клиента автоэнроллмента удалять просроченные или отозванные сертификаты из хранилища пользователя или компьютера. Используется только при активной политике автоэнроллмента. Данная опция недоступна, если предыдущее поле Purpose содержит Encryption.
  • Include symmetric algorithms allowed by the subject — позволяет приложениям использовать новые симметричные алгоритмы CNG (Cryptography New Generation) при использовании данного сертификата. Доступно только начиная с Windows Server 2008.
  • Archive subject's private key — инструктирует клиента инициировать процедуру архивации закрытого ключа на сервере CA при энроллменте сертификата. Данная опция недоступна, если Purpose выставлен в Signature или в Signature and smartcard logon.

Примечание: как вы можете зметить, опции: Delete revoked or expired certificate и Archive subject's private key являются взаимоисключаемые. Вы не можете использовать обе эти опции в пределах одного шаблона.

  • Minimum key size — указывает минимальную длину ключа, который будет генерироваться при запросе сертификата.
  • Allow Private Key To Be Exported — позволяет экспортировать (например, для бэкапа) закрытый ключ данного сертификата из локального хранилища сертификатов.
  • Enroll subject without requiring any user input — инструктирует клиента не выводить пользователю никаких окошек, которые бы требовали ввода от пользователя. Данный параметр обязателен для компьютерных шаблонов, которые используются для автоэнроллмента.
  • Prompt the user during enrollment — выводит диалоговое окно при энроллменте. Данный параметр обязателен, если закрытый ключ сертификата будет храниться на смарт-карте. Эта опция позволит CSP смарт-карты выводить окно ввода PIN от смарт-карты.
  • Prompt The User During Enrollment And Require User Input When The Private Key Is Used — при энроллменте выводит диалоговые окна настройки private key strong protection и включает этот режим для закрытого ключа.
  • CSP — позволяет выбрать Cryptographic Service Provider для генерации закрытого ключа. Для автоэнроллмента следует установить не более одного провайдера.

Вкладка Subject name

  • Supply in request — требует явного задания поля Subject при энроллменте. Недопустимо при автоэнроллменте.
  • Build From This Active Directory Information — инструктирует сервер CA заполнять поле Subject основываясь на данных учётной записи в Active Directory. Обязателен для автоэнроллмента.

Вкладка Issuance Requirements

  • CA Certificate Manager Approval — для всех запросов данного шаблона требуется явное одобрение администратора CA. При автоэнроллменте в первый раз будет отправлен запрос и потом, после принятия положительного решения администратором, при повторных срабатываниях триггера автоэнроллмента будет импортирован сам сертификат.

Примечание: при автоэнроллменте автоматическое получение сертификата после одобрения администратором произойдёт только при условии, если в политике автоэнроллмента выставлен чек-бокс на Renew expired certificates, update pending certificates, and remove revoked certificates. В противном случае, автоэнроллмент не будет работать для конкретного шаблона.

  • This Number Of Authorized Signatures — указывает количество подписей, которыми должен быть подписан запрос. Для автоэнроллмента это значение не должно быть большье 1, иначе автоэнроллмент для конкретного шаблона работать не будет.

Примечание: строго говоря, выставлять данный параметр в 1 тоже не очень рекомендуется. Если с сертификатом что-то случится (будет утерян, просрочен или отозван), то обновление такого сертификата средствами автоэнроллмента будет невозможным, поскольку запрос нечем будет подписать и получить новый сертификат можно будет только после ручного энроллмента через консоль MMC.

  • Если предущее значение больше нуля, то вы можете настроить для шаблона настроенные политики выдачи.
  • Require The Following For Reenrollment: Same criteria as for enrollment — при обновлении сертификата, используются те же требования, что и при первом запросе сертификата. Для успешной работы автоэнроллмента не следует включать эту опцию, если количество требуемых подписей при запросе больше нуля, поскольку запрос надо будет чем-то подписать и если специального сертификата в локальном хранилище не окажется, то автоэнроллмент не будет работать для конкретного шаблона.
  • Require The Following For Reenrollment: Valid existing certificate — при обновлении сертификата требуется наличие существующего действующего и не отозванного сертификата на основе данного шаблона. Действующий сертификат будет использоваться для подписи запроса обновления сертификата.

Примечание: если количество требуемых подписей при энроллменте больше 0 (обычно используется при Enroll On Behalf Of), то первый раз сертификат должен быть получен через ручной запрос с использованием оснастки MMC. Это полностью соответствует идеологии EOBO, когда администратор регистрирует каждую смарт-карту в учётных журналах, запрашивает сертификат для неё и под роспись выдаёт пользователю. Обновление сертификата уже будет происходить автоматически. Для этого данный переключатель следует переставить в Valid existing certificate. Существующий сертификат будет использоваться для подписи нового запроса. Соответственно, если сертификат будет утерян, отозван или просрочен, то обновление по очевидным причинам не будет, поскольку запрос подписать будет нечем. Для получения нового сертификата придётся повторить всю процедуру, как и при первом получении сертификата с помощью EOBO.

Вкладка Superseded templates

Данная вклкадка показывает какие существующие шаблоны будут заменены текущим шаблоном. Если вы решили использовать специально настроенный шаблон для смарт-карт, то вы можете этим специально настроенным шаблоном версии 2 заменить стандартные преднастроенные шаблоны (Smart Card Logon и Smart Card User). Это запретит дальнейший энроллмент сертификатов на основе устаревших шаблонов, которые заменяет новый шаблон. И если у пользователей есть сертификаты на основе устаревших шаблонов, то добавление их во вкладку Superseded templates проинструктирует клиентов обновить сертификаты на основе нового специально настроенного шаблона. Автоэнроллмент автоматически следит за обновлениями шаблонов. И если какой-то шаблон был заменён другим и у пользователя есть сертификат на основе устаревшего шаблона, автоэнроллмент запросит новый сертификат для нового шаблона.

Примечание: в настоящее время смарт-карты не поддерживают использование шаблонов версии 3.

Вкладка Extensions

Данная вкладка позволяет настраивать определённые расширения, которые будут опубликованы в сертификатах. В контексте автоэнроллмента ничего интересного не представляет.

Вкладка Security

Достаточно важная вкладка, поскольку она определяет, может ли автоэнроллмент использовать конкретный шаблоны или нет. Если вы планируете использовать шаблон для автоэнроллмента, то соответствующие учётные записи (или группы) должны иметь следующие права:

  • Read
  • Enroll
  • Autoenroll

Отсутствие любого из этих прав не позволит автоэнроллменту запрашивать сертификаты на основе конкретного шаблона.

Примечание: это достаточно распространённая ошибка. Следует понимать, что пользовательским сертификатам права назнаются учётным записям пользователей, а компьютерным сертификатам права назначаются учётным записям компьютеров.

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