Решение проблем с запуском центра сертификации из-за недоступного CRL » История » Версия 1
Redmine Admin, 26.02.2026 08:47
| 1 | 1 | Redmine Admin | <h1>Решение проблем с запуском центра сертификации из-за недоступного CRL</h1> |
|---|---|---|---|
| 2 | |||
| 3 | <p><em>Дата: 4 сентября 2016 г. | Категория: Microsoft</em></p> |
||
| 4 | |||
| 5 | <h2>Оглавление</h2> |
||
| 6 | <ul> |
||
| 7 | <li><a href="#issue">Проблема</a></li> |
||
| 8 | <li><a href="#workaround">Временное решение</a></li> |
||
| 9 | <li><a href="#cause">Причина недоступности CRL</a></li> |
||
| 10 | <li><a href="#fix">Как исправить</a></li> |
||
| 11 | <li><a href="#conclusion">Заключение</a></li> |
||
| 12 | </ul> |
||
| 13 | |||
| 14 | <hr> |
||
| 15 | |||
| 16 | <p>Недавно я написал несколько статей о настройке корневого центра сертификации (Root CA) и подчинённого центра сертификации (Subordinate CA) в качестве базовой шпаргалки по развёртыванию корпоративной PKI. Один из элементов конфигурации, который менее понятен и часто становится причиной серьёзных проблем с центрами сертификации, — это список отозванных сертификатов (CRL, Certificate Revocation List). Недоступный CRL может вывести из строя вашу PKI и другие службы, которые от неё зависят.</p> |
||
| 17 | |||
| 18 | <h2 id="issue">Проблема</h2> |
||
| 19 | |||
| 20 | <p>Вы можете обнаружить, что ваш центр сертификации (в данном случае — подчинённый CA) не запускается, возможно, после перезагрузки сервера. При попытке запустить CA появляется следующее сообщение:</p> |
||
| 21 | |||
| 22 | <blockquote> |
||
| 23 | <p>Функция проверки отзыва не смогла проверить отзыв, поскольку сервер отзыва был недоступен. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)</p> |
||
| 24 | </blockquote> |
||
| 25 | |||
| 26 | <p>Что выглядит следующим образом:</p> |
||
| 27 | <p><em>Невозможно запустить CA из-за недоступного CRL CRYPT_E_REVOCATION_OFFLINE</em></p> |
||
| 28 | |||
| 29 | <p>В журнале приложений подчинённого CA можно увидеть событие с ID 100 от источника CertificationAuthority:</p> |
||
| 30 | |||
| 31 | <blockquote> |
||
| 32 | <p>Active Directory Certificate Services не запустился: Не удалось загрузить или проверить текущий сертификат CA. stealthpuppy Issuing CA. Функция проверки отзыва не смогла проверить отзыв, поскольку сервер отзыва был недоступен. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE).</p> |
||
| 33 | </blockquote> |
||
| 34 | |||
| 35 | <p>А также событие с ID 48 от того же источника, CertificationAuthority:</p> |
||
| 36 | |||
| 37 | <blockquote> |
||
| 38 | <p>Не удалось проверить статус отзыва для сертификата в цепочке для сертификата CA 0 для stealthpuppy Issuing CA, поскольку сервер в настоящее время недоступен. Функция проверки отзыва не смогла проверить отзыв, поскольку сервер отзыва был недоступен. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE).</p> |
||
| 39 | </blockquote> |
||
| 40 | |||
| 41 | <p>Сертификат 0 — это сертификат подчинённого CA, выданный автономным корневым CA.</p> |
||
| 42 | |||
| 43 | <p>Кроме того (после запуска CA с использованием временного решения) можно увидеть множество неудачных запросов на сертификаты с той же ошибкой Offline CRL:</p> |
||
| 44 | <p><em>Неудачные запросы на сертификаты из-за CRYPT_E_REVOCATION_OFFLINE</em></p> |
||
| 45 | |||
| 46 | <p>В данном случае я знал, что мой CRL был доступен — он размещён на том же сервере, что и подчинённый CA, и я настроил как автономный корневой CA, так и подчинённый CA на использование одной и той же точки распространения CRL.</p> |
||
| 47 | |||
| 48 | <p><strong>Точка распространения CRL на подчинённом CA</strong></p> |
||
| 49 | |||
| 50 | <h2 id="workaround">Временное решение</h2> |
||
| 51 | |||
| 52 | <p>Конечно, вам, скорее всего, нужно как можно быстрее запустить CA. Простой способ сделать это — отключить проверку CRL с помощью следующей команды на сервере CA:</p> |
||
| 53 | |||
| 54 | <pre><code>certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE</code></pre> |
||
| 55 | |||
| 56 | <p>Выполните эту команду из командной строки с правами администратора, и теперь вы сможете запустить CA и приступить к устранению неполадок.</p> |
||
| 57 | |||
| 58 | <p><em>Установка флага CRLF_REVCHECK_IGNORE_OFFLINE с помощью certutil.exe</em></p> |
||
| 59 | |||
| 60 | <h2 id="cause">Причина недоступности CRL</h2> |
||
| 61 | |||
| 62 | <p>Мой CRL был доступен, так как он размещён в Active Directory (для компьютеров, присоединённых к домену) и через HTTP по адресу <code>crl.home.stealthpuppy.com</code> — псевдониму подчинённого CA. Я проверил, что могу получить CRL, вставив HTTP-путь в браузер, и мне было предложено загрузить файл.</p> |
||
| 63 | |||
| 64 | <pre><code>http://crl.home.stealthpuppy.com/CertEnroll/stealthpuppy Issuing CA.crl |
||
| 65 | http://crl.home.stealthpuppy.com/CertEnroll/stealthpuppy Offline Root CA.crl</code></pre> |
||
| 66 | |||
| 67 | <p>Поскольку я недавно потратил время на настройку корпоративной PKI в своей лаборатории и для одного проекта, я хорошо познакомился с консольной утилитой <strong>certutil.exe</strong>. Этот инструмент доступен во всех версиях Windows и должен быть первым инструментом для устранения неполадок и управления сертификатами и центрами сертификации в Windows.</p> |
||
| 68 | |||
| 69 | <p>Certutil может выполнять множество функций, одна из которых — проверка CRL. Я знаю путь к файлу CRL, потому что могу просмотреть CRL в файловой системе (в <code>C:\Windows\System32\certsrv\CertEnroll</code>), и я ранее настроил CRL для обоих CA.</p> |
||
| 70 | |||
| 71 | <p>Для проверки CRL используйте переключатель <code>-URL</code> с HTTP- (или LDAP-) путём к CRL:</p> |
||
| 72 | |||
| 73 | <pre><code>certutil -URL "http://crl.home.stealthpuppy.com/CertEnroll/stealthpuppy Issuing CA.crl"</code></pre> |
||
| 74 | |||
| 75 | <p>Это отобразит инструмент извлечения URL, который покажет, что с CRL можно связаться, и статус будет <strong>OK</strong>.</p> |
||
| 76 | |||
| 77 | <p><em>Использование certutil.exe для тестирования CRL</em></p> |
||
| 78 | |||
| 79 | <p>Однако, если мы загрузим целевой сертификат — в данном случае сертификат подчинённого CA, — мы начнём понимать, в чём заключается проблема с CRL.</p> |
||
| 80 | |||
| 81 | <p>Выберите сертификат для подчинённого CA, который был ранее экспортирован в файловую систему (в <code>C:\Windows\System32\certsrv\CertEnroll</code>) — нажмите <strong>Select</strong>, откройте сертификат и снова нажмите <strong>Retrieve</strong>. На этот раз мы увидим новую строку, показывающую, что базовый CRL для сертификата подчинённого CA <strong>истёк</strong>.</p> |
||
| 82 | |||
| 83 | <p><em>Истёкший базовый CRL на подчинённом CA</em></p> |
||
| 84 | |||
| 85 | <p>CRL для сертификата подчинённого CA поступает от корневого CA, поэтому нам нужно проверить именно этот CRL. Откройте файл CRL (<code>C:\windows\system32\certsrv\CertEnroll\stealthpuppy Offline Root CA.crl</code>) — дважды щёлкните или щёлкните правой кнопкой мыши и выберите <strong>Open</strong>. Здесь мы можем увидеть информацию о CRL, включая время следующей публикации (<strong>Next CRL Publish</strong>).</p> |
||
| 86 | |||
| 87 | <p><em>Просмотр свойств CRL корневого CA</em></p> |
||
| 88 | |||
| 89 | <p>На момент устранения неполадок эта дата уже прошла, и поскольку корневой CA находится в автономном режиме, а CRL размещён на другом сервере (подчинённом CA), этот конкретный CRL никогда не получит обновления. Поэтому, когда подчинённый CA перезагружается, он проверяет CRL корневого CA и обнаруживает, что он истёк. Следовательно, служба центра сертификации не запускается.</p> |
||
| 90 | |||
| 91 | <h2 id="fix">Как исправить</h2> |
||
| 92 | |||
| 93 | <p>Теперь мы понимаем, почему служба центра сертификации не запускается, и понимаем, почему CRL считается недоступным, даже если формулировка не соответствует симптомам. Если бы сообщение об ошибке сообщало, что CRL истёк, а не что он недоступен, я мог бы сэкономить время на устранении неполадок. Теперь мы знаем, что необходимо заново опубликовать CRL с корневого CA.</p> |
||
| 94 | |||
| 95 | <ol> |
||
| 96 | <li>Запустите автономный корневой CA, войдите в систему и откройте консоль <strong>Certification Authority</strong>.</li> |
||
| 97 | <li>Сначала убедитесь, что интервал публикации CRL увеличен, чтобы в ближайшее время не столкнуться с той же проблемой. Откройте свойства узла <strong>Revoked Certificates</strong>, чтобы просмотреть и задать интервал публикации. Интервал по умолчанию — 1 неделя, что, очевидно, слишком часто для автономного корневого CA.</li> |
||
| 98 | <li>Вместо этого установите значение, подходящее для вашей среды. Помните, что вам нужно будет загрузить корневой CA и опубликовать новый CRL до окончания этого интервала, иначе вы столкнётесь с точно такой же проблемой.</li> |
||
| 99 | </ol> |
||
| 100 | |||
| 101 | <p><em>Настройка интервала публикации CRL на корневом CA</em></p> |
||
| 102 | |||
| 103 | <p>Теперь опубликуйте новый CRL: щёлкните правой кнопкой мыши по узлу <strong>Revoked Certificates</strong> и выберите <strong>All Tasks</strong> → <strong>Publish</strong>.</p> |
||
| 104 | |||
| 105 | <p><em>Публикация нового CRL с корневого CA</em></p> |
||
| 106 | |||
| 107 | <p>Скопируйте обновлённый CRL (по умолчанию из <code>C:\Windows\System32\certsrv\CertEnroll</code>) с корневого CA в точку распространения CRL и перезапишите существующий файл CRL (снова <code>C:\Windows\System32\certsrv\CertEnroll</code> на моём подчинённом CA).</p> |
||
| 108 | |||
| 109 | <p>Теперь, если мы снова используем <code>certutil.exe</code> для проверки CRL, всё будет в порядке:</p> |
||
| 110 | |||
| 111 | <p><em>Просмотр проверенного CRL с помощью certutil.exe</em></p> |
||
| 112 | |||
| 113 | <p>Чтобы убедиться, что служба центра сертификации подчинённого CA запустится, повторно включите проверку CRL:</p> |
||
| 114 | |||
| 115 | <pre><code>certutil –setreg ca\CRLFlags -CRLF_REVCHECK_IGNORE_OFFLINE</code></pre> |
||
| 116 | |||
| 117 | <p>Если вы правильно переопубликовали CRL с корневого CA, служба должна запуститься, и вы сможете выключить корневой CA. Затем откройте Outlook и установите напоминание в календаре за неделю до следующего истечения срока действия CRL.</p> |
||
| 118 | |||
| 119 | <h2 id="conclusion">Заключение</h2> |
||
| 120 | |||
| 121 | <p>Я сталкивался с этой проблемой недоступного CRL несколько раз и по-настоящему не понимал, в чём именно проблема, пока не уделил время надлежащему устранению неполадок. Я не так часто работаю с корпоративной PKI, и легко недооценить сложность правильной настройки служб сертификации AD.</p> |
||
| 122 | |||
| 123 | <p>Та же самая проблема также вызывала у меня трудности при развёртывании службы регистрации сетевых устройств (NDES) для выдачи сертификатов устройствам через Intune. Истёкший CRL приводил к тому, что служба NDES не запускалась, и в журналах событий никоим образом не упоминался истёкший CRL.</p> |
||
| 124 | |||
| 125 | <hr> |
||
| 126 | |||
| 127 | <p><strong>Автор:</strong> Aaron Parker (stealthpuppy)<br> |
||
| 128 | <strong>О себе:</strong> Специалист по end-user computing с 30-летним опытом в предпродажной подготовке, проектировании, внедрении и поддержке сред end-user computing (виртуальные рабочие столы, современное управление устройствами и корпоративная мобильность). Aaron также около 20 лет участвует в IT-сообществе, выступая с докладами, ведя блог и поддерживая open-source проекты. В настоящее время — Senior Staff Engineer в Office of the CTO @ Nerdio.</p> |
||
| 129 | |||
| 130 | <p><em>Оригинал статьи: <a href="https://stealthpuppy.com/resolving-issues-starting-ca-offline-crl/">https://stealthpuppy.com/resolving-issues-starting-ca-offline-crl/</a></em></p> |