Ситуация следующая. Имеются два центра сертификации (Certification Authority, CA) — Offline Root CA (корневой) и Enterprise Subordinate CA (подчиненный). Схема стандартная, подчиненный CA занимается выпуском сертификатов, корневой стоит в выключенном состоянии и включается только для обновления своего сертификата, сертификата подчиненного CA и списка отзыва (Certificate Revocation List, CRL).
И вот, после очередного обновления сертификата подчиненного CA он отказался включаться и выдал ошибку 0x80092013 (CRYPT_E_REVOCATION_OFFLINE). В сообщении об ошибке сказано, что функция отзыва не может проверить список отзыва, поскольку сервер отзыва недоступен. Эта ошибка возникает в следующих ситуациях:
• Недоступен список отзыва (CRL);
• Не опубликовано местоположение CRL;
• Истек срок действия CRL.
Порывшись в системном журнале, нашел ошибку с Event ID 48. Из сообщения видно, что для сертификата 5 не удается проверить цепочку доверия.
Для того, чтобы посмотреть на этот сертификат, нам надо запустить CA. Поэтому временно отключим проверку CRL командой:
certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE
Теперь запускаем CA, кликаем правой клавишей на сервере и выбираем пункт меню «Properties».
Открывается окно свойств CA. На вкладке «General» находим список сертификатов, выбираем нужный и жмем «View Certificate».
В свойствах сертификата находим строчку «CRL Distribution Points» с адресами, по которым должен находится список отзыва. Адресов два — файловая шара на корневом CA и веб-сайт на подчиненном CA. И как и следовало ожидать, ни по одному из адресов CRL не доступен.
Для нормальной работы нам нужно найти актуальный CRL. Идем на корневой CA, открываем оснастку «Certification Authority» — «Properties», переходим на вкладку «Extensions» и выбираем из списка расширение «CRL Distribution Point (CDP)». В нем находится список мест, в которых публикуется список отзыва. Что интересно, в списке есть и подчиненный CA, но по какой то причине CRL на него не попал.
В данной ситуации самое простое, что можно сделать — это вручную разместить CRL в указанном месте. Находим на корневом CA файл CRL, проверяем его актуальность и копируем на подчиненный.
Затем включаем обратно проверку:
certutil –setreg ca\CRLFlags -CRLF_REVCHECK_IGNORE_OFFLINE
и рестартуем сервис:
Restart-Service certsvc -force
Сервис стартует успешно, значит все сделано правильно.
certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE
Спорное решение отключать проверку ради того что бы посмотреть точки распространения. Для этой задачи есть оснастка «PKI предприятия» которая показывает AIA и CDP со сроками действия.