Создание сертификата
Порядок вызовов при построении сертификата выглядит следующим образом:
- Центр сертификации инициализирует модули с помощью вызовов ICertPolicy и ICertExit (происходит один раз при инициализации сервера). ЦС инициализирует политики и завершает модули, вызывая ICertPolicy2::Initialize и ICertExit::Initialize.
- Посредник вызывает ЦС через ICertConfig (выполняется один раз на промежуточную инициализацию). Посредник находит необходимую строку конфигурации путем вызова ICertConfig::GetConfig.
- Клиент вызывает посредника через интерфейс, характерный для посредника (происходит один раз для каждого запроса). Клиент отправляет запрос сертификата посреднику. Это может быть, например, Microsoft Internet Explorer, отправляющий запрос через элемент управления регистрацией сертификатов в Microsoft IIS.
- Посредник в ЦС через ICertRequest (выполняется один раз для каждого запроса). Посредник отправляет запрос сертификата в ЦС через ICertRequest::Submit. В случае службы IIS это можно сделать с помощью сценариев Active Server Pages.
- ЦС вызывает модуль политики через интерфейс ICertPolicy (выполняется один раз для каждого запроса). ЦС уведомляет модуль политики о том, что запрос поступил, вызвав ICertPolicy::VerifyRequest. Модуль политики может изучить запрос и изменить сертификат, вызвав методы интерфейса ICertServerPolicy . Затем модуль политики может указать, что запрос ОК (если да, сертификат создается на этом этапе), запрос должен быть отклонен или запрос должен быть приостановлен.
- (Необязательно) Администратор вызывает ЦС через интерфейс ICertAdmin . Если запрос приостановлен, администратор может повторно отправить или отклонить запрос, либо изменить атрибуты и расширения запроса. Обратите внимание, что при повторном отправке запроса модуль политики сможет обработать запрос (в результате вызова ICertPolicy::VerifyRequest). Задача повторного отправки или отклонения запроса может выполняться с помощью оснастки MMC центра сертификации или другого приложения, использующего ICertAdmin.
- ЦС вызывает модуль выхода через интерфейс ICertExit . Если модуль выхода указал (при вызове ICertExit::Initialize , на шаге 1) он заинтересован в просмотре сертификатов, выданных или ожидающих запросов, ЦС вызовет ICertExit::Notify.
- Модуль выхода вызывает ЦС через интерфейс ICertServerExit . Модуль выхода может изучить запрос и новый сертификат, вызвав методы ICertServerExit.