Contents of this directory is archived and no longer updated.

Update 04.01.2010: исправлена неточность в тексте. CRL'ы из CDP контейнера AD не копируются на клиентские компьютеры.


КДПВ В предыдущей статье: Обсуждение схем иерархии Certification Authority мы обсудили наиболее часто встречающиеся ошибки при дизайне иерархии CA. Если кто-то захочет перевести как минимум корневые Enterprise CA на Standalone CA и сделать их Offline, то в этом посте вы узнаете как это делается пошагово.

Изначальные условия:

  • onlineca.adatum.com — DNS имя компьютера в домене/лесу adatum.com с установленной ролью Enterprise CA, которую планируется перенести на Standalone CA. Имя CA — Adatum Root CA;
  • OfflineRCA — NetBIOS имя компьютера в рабочей группе. Этот компьютер будет держать роль Standalone Root CA для домена/леса adatum.com.

Предварительная переконфигурация

Перед переносом текущего корневого и/или Policy CA следует заранее спланировать периодичность публикации CRL. Если Enterprise CA, как правило, публикует Base CRL каждые 7 дней и Delta CRL — каждые 24 часа. Для Offline CA такая конфигурация будет неработоспособна. Поэтому мы должны переконфигурировать следующие параметры:

  • Отключение публикации Delta CRL;
  • Увеличение срока действия Base CRL;
  • Настройка Overlap Settings.

Для этого мы можем применить вот такой Reg файл:

Примечание: Статья содержит сведения о внесении изменений в системный реестр. Перед внесением изменений в системный реестр рекомендуется создать резервную копию системного реестра и изучить процедуру его восстановления. Дополнительные сведения о создании резервной копии, восстановлении и изменении реестра см. в статье базы знаний Microsoft: http://support.microsoft.com/kb/256986/.

Windows Registry Editor Version 5.00

                                                                                   Root CA]
"CRLPeriod"="months"
"CRLPeriodUnits"=dword:00000003
"CRLOverlapPeriod"="weeks"
"CRLOverlapUnits"=dword:00000001
"CRLDeltaPeriod"="Days"
"CRLDeltaPeriodUnits"=dword:00000000
"CRLDeltaOverlapPeriod"="hours"
"CRLDeltaOverlapUnits"=dword:00000000
"CAXchgValidityPeriod"="Weeks"
"CAXchgValidityPeriodUnits"=dword:00000000
"CAXchgOverlapPeriod"="Days"
"CAXchgOverlapPeriodUnits"=dword:00000000
"ValidityPeriod"="Years"
"ValidityPeriodUnits"=dword:00000005

Этим файлом мы задаём срок действия Base CRL в 3 месяца (но этот период может быть и другой, в зависимости от местных условий) с overlap равным 1 неделя. Так же отключили использование Delta CRL и CA Exchange, который используется для архивирования ключей в базе CA. А так же установили срок действия конечных сертификатов в 5 лет. Если под этим CA будет выделенный Offline Policy CA, то это значение может быть изменено на 10 лет. После импорта этого файла, вы должны перезапустить службу Certificates Services:

net stop certsvc && net start certsvc

Теперь нужно опубликовать новый CRL с новыми настройками:

certutil –CRL

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

Бэкап Certification Authority

Бэкапу будут подлежать следующие вещи:

  • База CA;
  • Ключевая пара CA;
  • Конфигурация CA.

Примечание: на данном этапе пользователи и компьютеры уже не смогут отправлять запросы на этот CA. Но могут продолжать использовать CRL'ы для валидации сертификатов.

Первым делом нужно сделать бэкап самой базы CA. Для этого в командной строке выполните:

certutil –backup c:\RootCA_%date%

Для удаления ключевой пары запустите консоль MMC и добавьте в ней оснастку Certificates с указанным контекстом Computer Account. В оснастке раскройте секцию: Personal –> Certificates и найдите текущий сертификат CA. Далее, Action –> All Tasks –> Export. На странице Export Private Key мастера экспорта сертификатов переставьте переключатель в Yes, export private key. На странице Export file format поставьте галочки напротив Delete the private key if the export is successful и Export extended properties. Этим самым мы удаляем закрытый ключ CA с данного сервера, поскольку он больше не нужен и для предотвращения несанкционированного доступа к ключу. Установите пароль на PFX файл и сохраните в него экспортируемый сертификат. После экспорта удалите этот PFX файл.

Примечание: экспорт сертификата в PFX нужен только для удаления с сервера закрытого ключа CA. Сам ключ был сохранён во время бэкапа базы CA.

Теперь у нас в корне диска C: будет храниться полный бэкап базы CA и его ключевая пара. Нам осталось выполнить бэкап конфигурации CA. Для этого откройте редактор реестра и установите курсор на ключе:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\Adatum Root CA

Экспортируйте этот ключ в Reg файл и сохраните в папке, где расположен бэкап базы CA. После этого перенесите всю папку бэкапа на съёмный носитель и скопируйте в корень диска C: компьютера OfflineRCA.

Демонтаж Enterprise CA

Теперь мы готовы демонтировать наш Online Enterprise Root CA. Для этого запустите Server Manager (для 2008 и выше) или Add or Remove Programs –> Windows Components (для 2003) и удалите с сервера роль CA.

После демонтажа роли убедитесь, что данный CA больше не отображается в AD как Issuing CA. Для этого можете запустить оснастку ADSIEdit.msc в контексте Configuration. И пройдите по пути: Configuration –> Services –> Public Key Services –> Enrollment Services. Если демонтируемый CA отсутствует внутри этой папки, то можете закрыть консоль. Если всё ещё отображается, то удалите запись данного CA и закройте ADSI Editor.

Примечание: для удаления объектов PKI из AD вам потребуются права Enterprise Admins.

Установка Offline Standalone CA

На данном этапе все манипуляции будут производиться на сервере OfflineRCA, который состоит в рабочей группе. Запустите Server Manager (или Add or Remove Programs –> Windows Components для 2003) и поставьте галочку на Active Directory Certificate Services (или Certification Authority для 2003). Я думаю, что мастер вам уже знаком, поэтому я только расскажу на каких страницах мастера нам потребуется сделать изменения. В принципе, можете двигаться Next->Next до страницы Private Key. На этой странице выберите Use existing private key и Select a certificate and use its associated private key. Нажмите Next и нажмите кнопку Import. Импортируйте закрытый ключ вместе с сертификатом из PFX файла, который находится в папке с бэкапом CA. На следующей странице можете задать папки хранения базы CA.

Примечание: вам не обязательно устанавливать Standalone CA на полный сервер, а лучше будет устанавливать в Server Core.

Когда роль CA установлена, мы должны восстановить базу CA и конфигурацию. В командной строке выполните:

certutil –restore c:\RootCA_%date% –f –config "OfflineRCA\Adatum Root CA"

и конфигурацию восстановить простым запуском Reg файла. Если ваш бывший корень публиковал сертификаты и CRL в LDAP, то теперь мы не сможем это делать напрямую. Чтобы исправить это, откройте оснастку CertSrv.msc, выберите свойства CA и перейдите на вкладку Extensions. В ней найдите и удалите все LDAP ссылки в CDP и AIA, которые связаны с вашим доменом.

Всё, теперь мы полностью перенесли Online Enterprise Root CA на Offline Standalone CA, который теперь может выключаться на очень большие промежутки времени. По сути это потребуется только для того, чтобы опубликовать новый CRL, издать новый сертификат подчинённому CA или обновить свой собственный сертификат. Ну и обновления на сервер ставить тоже надо невзирая на то, что сервер будет большую часть времени выключен.

Включение распознавания Offline CA в лесу

Чтобы наш мигрированный CA распознавался в исходном домене/лесу adatum.com, нам нужно опубликовать его сертификаты в следующих контейнерах Active Directory:

  • Certification Authorities — данный контейнер используется для организации доверия корневым CA в текущем лесу. Данные сертификаты автоматически копируются в контейнер Trusted Root CAs всех компьютеров в лесу;
  • AIA — данный контейнер используется для публикации Subordinate (или Intermediate) CA. Это позволяет сократить время на построение цепочек сертификатов. Сертификаты из данного контейнера автоматически копируются в Intermediate CAs на каждый компьютер в текущем лесу;
  • CDP — данный контейнер используется для публикации любых CRL. Чуть ниже я расскажу, как вы будете его использовать. Содержимое данного контейнера не копируется клиентам и будет использоваться только в случае, если какой-то сертификат явно ссылается на CRL в этом контейнере.
  • CN = NTAuthCertificates — это запись внутри контейнера Public Key Services. Данная запись содержит сертификаты тех CA, которые выдавали логонные сертификаты. Это относится как к логонным сертификатам для смарт-карт, сертификатам для аутентификации в IIS и VPN.

Для импорта сертификата CA войдите в домен с правами Enterprise Admins, скопируйте открытую часть сертификата в C:\RootCA.cer, запустите командную строку и выполните:

certutil –dspublish –f c:\RootCA.cer RootCAcertutil –dspublish –f c:\RootCA.cer SubCAcertutil –dspublish –f c:\RootCA.cer NTAuthCA

После того, как пройдёт репликация в лесу, наш новый CA будет полностью распознаваться как доверенный в текущем лесу.

Установка Online Enterprise Issuing CA

Теперь можно приступать к процессу установки Enterprise Subordinate CA, который уже будет обслуживать конечных потребителей. Единственная разница в установке будет в том, что в списке ролей CA вы должны выбрать Enterprise Subordinate CA.

Совет: при установке CA старайтесь избегать привязки к домену в distinguished name CA. Используйте только привязку к названию компании, например:

CN = Adatum Class 1 Public Primary Certification Authority
OU = DB management systems
O = Adatum Inc.
C = US

Сохраните запрос в файл и получите сертификат у вышестоящего Offline CA (корневого или policy). Этот вопрос выходит за рамки данного материала, поэтому рассматриваться не будет. Сконфигурируйте CA должным образом (точки распространения сертификатов, CRL, периодичность публикации CRL, шаблоны, etc.) и можете запускать его в работу.

Offline CA CRL lifecycle

В случае, если ваш Enterprise CA до миграции публиковал LDAP ссылки в сертификатах, то для избежания задержек при проверке сертификатов, вы в течении всей жизни текущего сертификата корневого и/или Policy CA должны поддерживать доступность CRL в этих точках. Поскольку наши Root и Policy CA теперь члены рабочей группы и не могут публиковать CRL прямо в AD, вам придётся заниматься этим вручную. Когда Offline CA опубликует новый CRL, вы должны его доставить (по сети, что не очень рекомендуется, или через съёмные носители) в точки, куда он публиковался раньше (чтобы обеспечить работоспособность расширений CDP/AIA сертификатов). Если с HTTP ссылками всё просто (положили файл на веб-сервер и всё), то с LDAP придётся делать чуточку иначе, а именно — публиковать его в AD в контейнер CDP:

certutil –dspublish –f C:\RootCA.crl "Adatum Root CA"

Ещё раз обращаю ваше внимание на то, что эта операция требует права Enterprise Admins.

Кажется ничего не забыл. Но если что-то забыл — напомните.


Share this article:

Comments:

mikas

Вадим, не много не в тему миграции, а в сторону иерархии служб сертификации: как вы относитесь к конструкции с отсутствующим RootCA в плане ОС. Т.е. когда мы просто имеем ключ и сертификат и пользуясь, например, возможностями OpenSSL подписываем сертификаты SubordinateCA\Issuing CA? Это значительная экономия на лицензии ОС! Так же прошу вас осветить такой момент: Вначале мы имеем свой собственный RootCA сертификат, сгенерили его сами, но организация растёт, у неё появляются публичные сервисы, которые нужно подписывать. Покупается публичный сертификат - но что делать с существующей инфпраструктурой? Запускать в работу еще один схему сертификации? Постепенно уходить от непубличной схемы? Нужны ли нам публичные сертификаты в закрытой сети? P.S. я заранее приношу извинения, если непрвильно использую термины или вообще "не в теме", я скорее начинающий в службах сертификации, чем дока.

Vadims Podāns

Ну нормально отношусь, пока корень является PKI-compliant. Т.е. кроме выдачи сертификатов нужно обеспечить: 1) расширение AIA в сертификате; 2) расширение CDP в сертификате; 3) возможность создания и подписывания CRL. т.е. если вы это можете обеспечить средствами OpenSSL, то почему бы и нет? Просто мне кажется, что это будет не очень удобно. Что касается публичных сервисов, то как правило покупаются конкретные сертификаты для конкретных сервисов (если я правильно понимаю вопрос). Инфраструктуру этих сертификатов поддерживает коммерческий CA и вам заботиться тут не о чем. Разве что позаботиться о безопасности ключей этих сертификатов. Возможны варианты, когда у коммерческого CA приобретается сертификат для Subordinate CA, как это делает, например, Microsoft. Либо по договору с коммерческим CA можно устроить Qualified Subordination. Тогда коммерческий CA выдаёт вам сертификат, который можно использовать только для каких-то определённых целей, которые оговорены в договоре. Но это уж слишком дорогое удовольствие, поэтому нет однозначного ответа на этот вопрос, поскольку техническая составляющая вопроса будет не самой главной.

mikas

> Просто мне кажется, что это будет не очень удобно. Почему же? Сложно сделать изначально правильный сертификат - так ведь и сертификация вещь не простая! CRL для SubordinateCA\Issuing CA нужны раз в два, три месяца. Их всё равно носить на флешке! :-) Так почему бы не запускать заранее подготовленный скрипт на временной виртуальной машине для генерации CLR? Еще один плюс - не нужно ставить обновления на RootCA (обновлять OopenSSL конечно нужно - но, насколько я знаю, эти библиотеки не требуют установки). Но в итоге - кому как нравится, конечно. P.S. Зато "оффлайновей" не придумаешь, со всеми вытекающими.

Vadims Podāns

> Сложно сделать изначально правильный сертификат вы так говорите, будто это действительно сложно. В Windows 2000 и 2003 — да, надо было использовать capolicy.inf, но начиная с 2008, генерация корневого сертификата просто делается через Next-Next. Хотя, по большому счёту capolicy.inf использовать следует всегда при поднятии CA. > Их всё равно носить на флешке! :-) на котором будет сидеть медвежный троян. И как вы обеспечите безопасность ключей и аудит доступа к ним? И как у OpenSSL с безопасностью (наличие уязвимостей) и с поддержкой?

mikas

> вы так говорите, будто это действительно сложно. Я имею ввиду создать его средствами OpenSSL - там нет никаких "Next-Next". Маны прийдётся покурить. Наверняка есть различные GUI с OpenSSL? которые могут облегчить этот процесс. А так же создать корневой сертификат можно и на Win, потом выгрузить его в стандартизованном формате и уже средствами OpenSSL делать все другие операции. > на котором будет сидеть медвежный троян. Технические детали как носить мы опустим. > И как вы обеспечите безопасность ключей и аудит доступа к ним? И как у OpenSSL с безопасностью.... Аудит конечно не автоматизирован. Можно вести бумажный журнал, использовать корневой сертификат при участии комисси, например из 3-х человек. Вариантов много. Всё зависит от того, насколько он (аудит) вам важен. OpenSSL широкоприменяемый софт. Уязвимости конечно находят. По моему мнению очень редко, чаще наращивают функционал.

Vadims Podāns

> Технические детали как носить мы опустим. почему это? > Можно вести бумажный журнал, использовать корневой сертификат при участии комисси, например из 3-х человек выглядит не очень удобно. > OpenSSL широкоприменяемый софт вот я его не применял ни разу. > Уязвимости конечно находят :)

mikas

>> Технические детали как носить мы опустим. > почему это? Это конечно не мелоч, но если мы уж делаем надёжный rootCA то о безопасности флешки тоже должны позаботиться. Форматить её каждый раз, например. тут можно много полемизировать вплоть до того, что производитель ( в том числе процессора) делает закладки в своих продуктах и всё равно АНБ (ФБР) всё что нужно достанет. > выглядит не очень удобно. я ж говорил - со всеми вытекающими. >> OpenSSL широкоприменяемый софт > вот я его не применял ни разу. Всевозможные Linux, BSD, Unix, далее софт Apache, OpenVPN и много много много чего. Просто под Windows он не так нужен - есть встроенные средства.

Vadims Podāns

> Форматить её каждый раз, например ну для таких случаев придуманы HSM. > Просто под Windows он не так нужен - есть встроенные средства что и требовалось доказать :)

Di

Вадим, спасибо за отличный блог. Возможно посоветуете, как лучше поступить. По вашей статье в разделе Configuration –> Services –> Public Key Services –> Enrollment Services удалил не тот параметр - запись действующего CA. Соответственно вопрос, как ее можно восстановить (КД 2 штуки и репликация уже прошла). Имеется backup system state, но есть сомнения, что в нем содержится информация о конфигурации. Если она есть, восстановление надо производить на владельце ролей или на любом КД домена, для которого имеется соответствующий system state? Возможно, этот параметр можно вернуть другим способом?

Vadims Podāns

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

Di

Спасибо, помогло. Но возник один нюанс. При установке заново, видимо, я не импортировал ключ на нужном этапе, и у меня создался новый сертификат. После импорта, по пути в AD опубликован почему-то этот новый сертификат. По http и физически на диске в папке лежат правильные сертификаты. Как поправить сертификат в AD?

Vadims Podāns

вам надо переустанавливать CA полностью и повторять процедуру миграции (в данном случае восстановления из бакупа).

Di

Если переустанавливать с импортом в процессе установки - тоже самое. Я полагаю, у меня и раньше по пути в АД был опубликован неверный сертификат, я просто не обращал на это внимания. Поэтому? при импорте по этому пути ничего и не перезаписывается. Если полностью снести CA и поставить заново без импорта - всё публикуется верно. Возможно, есть способ принудительно опубликовать сертификат в AD?

Vadims Podāns

По поводу публикации в AD, в статье есть же примеры команды 'certutil -dspublish'. Они и публикуют сертификат в AD.

Di

Немного непонятно выразился. Я полностью сношу CA, ставлю заново, создаю новый сертификат и новый закрытый ключ. После этого смотрю pkiview - всё нормально. Потом импортирую из бэкапа свой CA - все настройки перезаписываются, кроме сертификата, опубликовонного в AD - там остается новый, который создался на этапе предыдущей полной установки. PS Пробовал certutil –dspublish (с сертификатом нужного CA-восстановленного из бэкапа)- пишет, что сертификат уже содержится в хранилище DS и ничего не меняется. PPS Сори, что загружаю, но ситуация не совсем стандартная видимо, сам не разберусь.

Vadims Podāns

Ну нет, если вы генерируете новый сертификат CA, вы не должны восстанавливать БД, потому что сертификаты и CRL'ы в базе подписаны совсем другим ключом. Как я уже сказал, если вы хотите сделать миграцию — вы должны указывать сертификат CA из PFX (ну или предварительно установленного в хранилище) и только его. В вашем случае вы просто создали совершенно новый CA.

Di

Понял. А в AD по пути, где хранится сертификат моего CA, могут хранится сертификаты нескольких CA, допустим, Offline и Issuing? У меня получилось так, что в pkiview по пути в AD опубликован неправильный сертификат (тот, что опубликовался туда при новой установке CA). И даже снеся службы сертификации и переустановив из бэкапа нужный CA я никак не могу заменить сертификат по тому пути. certutil –dspublish –f C:\RootCA.crt SubCA возвращает что сертификат уже существует. А по http записывается верный. Из-за чего такое может быть, не знаете?

Di

Вопрос снят. То ли повторная публикация вашим powershell скриптом помогла то ли что, но по прошествии некоторого времени сертификат по пути в AD записался, и pkiview его там отображает. Немного странное поведение, если честно.

Скилов Владимир

"Установка Offline Standalone CA ... конфигурацию восстановить простым запуском Reg файла" Вот тут нужно добавить "... открыть "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\Adatum Root CA" и ключ UseDS:DWORD поменять на "0" ..." У меня в лабе (W2K8R2) данный ключик приплывает с конфигом сервера и блокирует запуск службы CertSvc. Вываливается с ошибкой 1351: System error 1351 has occurred. Configuration information could not be read from the domain controller, either because the machine is unavailable, or access has been denied.

Vadims Podāns

Не надо. Потому что я не весь конфиг переношу на новый CA. Почитайте внимательно.

Скилов Владимир

"установите курсор на ключе: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\Adatum Root CA Экспортируйте этот ключ в Reg файл и сохраните в папке, где расположен бэкап базы CA" Может я где просмотрел конечно, но дальше идёт "конфигурацию восстановить простым запуском Reg файла" На первом этапе мы получаем *.reg-файл, а на втором его импортируем. При этом импортируется указанный параметр. И ещё один момент, правда пока не понял, какой ключик за это отвечает. После всех манипуляций с восстановлением, у меня отображаются ещё и "Certificate Templates", хотя на этапе установки был выбран вариант "Standalone". Судя по всему при импорте подтянулся ещё какой-то "лишний" ключик :(

Скилов Владимир

И ещё один момент, правда пока не понял, какой ключик за это отвечает. После всех манипуляций с восстановлением, у меня отображаются ещё и "Certificate Templates", хотя на этапе установки был выбран вариант "Standalone". Судя по всему при импорте подтянулся ещё какой-то "лишний" ключик :( Ключик называется CAType:DWORD. Когда было значение "0" - отображался "Certificate Templates", после того, как поставил значение "3" - отображаться перестал.

Скилов Владимир

Т.к. certutil –restore c:\RootCA_%date% –f –config "OfflineRCA\Adatum Root CA" выполняться отказалась - пришлось экспериментировать, в результате правильная команда: certutil -f -config "OfflineRCA\Adatum Root CA" -restore c:\RootCA_%date%, но в процессе была выполнена команда "certutil -f -restore c:\RootCA _%date%", что могло привести к возникновению проблемы. Хотя маловероятно это могло привести к такой реакции, т.к. вышеописанные ключи содержатся в reg-файле, который импортируется целиком. PS: Видимо от перемены мест слагаемых сумма изменяется, что было установлено опытным путём. При выполнении команды из примера возникала ошибка: "Expected no more than 1 args, received 4".

Comments are closed.