Примечание: данный пост содержит сведения об изменении настроек Active Directory и Certification Authority и автор ещё раз обращает ваше внимание на дисклаймер данного блога.
Иногда при миграции CA принимают решение об отказе в поддержке предыдущей PKI. Это обычно вызвано различными причинами. Например, некорректные и непоправимые ошибки в первоначальной конфигурации CA, неумение правильно провести миграцию, необходимость переконфигурации CA, которая требует создания нового CA и т.д. В таких случаях обычно поступают так:
Если первый метод достаточно прост и тривиален, второй уже требует дополнительных действий со стороны администратора. Это публикация CRL при фактическом отсутствии упразднённого CA и поддержание CRT файлов для построения цепочек сертификатов. И в данном случае старая PKI будет частью новой PKI за счёт кросс-сертификации. Для начала нужно рассмотреть что такое кросс-сертификация. Кросс-сертификация — процесс заверения одной иерархией PKI другой иерархии PKI. При этом заверенная PKI будет являться частью завереямой PKI. Рассмотрим простой пример:
Имеется иерархия CA из корневого Contoso-CA1 и подчинённого Contoso-CA2. Вы создаёте новую иерархию, состоящую из Adatum-CA1 и Adatum-CA2. При этом вы можете сделать кросс-сертификацию между Adatum-CA2 и Contoso-CA1 или Contoso-CA2:
В первом случае цепочка сертификатов для сертификата выпущенного в Contoso-CA2 будет выглядеть так:
Adatum-CA1
Adatum-CA2
Contoso-CA1
Contoso-CA2
EndCert
Как видите, клиент не должен явно доверять Contoso-CA1, а только Adatum-CA1. За счёт кросс-сертификации цепочка будет начинаться в иерархии Contoso и заканчиваться в иерархии Adatum.
Во втором случае цепочка сертификатов для сертификата выпущенного в Contoso-CA2 будет выглядеть так:
Adatum-CA1
Adatum-CA2
Contoso-CA2
EndCert
В принципе, можно сделать ещё и вот так:
В первом случае цепочка сертификатов для сертификата выпущенного в Contoso-CA2 будет выглядеть так:
Adatum-CA1
Contoso-CA1
Contoso-CA2
EndCert
Во втором случае цепочка сертификатов для сертификата выпущенного в Contoso-CA2 будет выглядеть так:
Adatum-CA1
Contoso-CA2
EndCert
По большому счёту вариантов достаточно много и выбор конкретного может быть продиктован как определёнными требованиями, так и вашими личными предпочтениями. Лично я предпочитаю делать кросс-сертификацию так, чтобы в конечном итоге получить наиболее короткую цепочку, но, по возможности, без включения в неё дополнительных корневых сертификатов. Поэтому для меня наиболее предпочтительный вариант будет второй вариант на первой картинке:
В нашем случае мы создаём новую иерархию Adatum и постепенно избавляемся от Contoso. Важно учитывать, что демонтаж старых центров сертификации можно проводить только после полной настройки новой иерархии PKI.
Теперь нужно добавить нужные шаблоны в выдачу на CA. Для этого:
Теперь запросите сертификат на основе шаблона Cross-signing. Этот сертификат вам потребуется для подписывания запросов сертификатов на основе шаблона Cross Certification Authority.
Кросс-сертификация — это весьма обширная тема. Для нашего сценария нет необходимости рассматривать подробности т.н. qualified subordination, поэтому ограничимся самым простым вариантов без дополнительных ограничений. Для этого создайте текстовый файл с именем Policy.inf и следующим содержанием:
[Version]
Signature = $WindowsNT$[RequestAttributes]
CertificateTemplate = CrossCA
далее скопируйте сертификат CA Contoso-CA2 на локальный диск. Запустите командную строку и выполните следующую команду:
certreq –policy
В открывшемся диалоговом окне укажите файл сертификата Contoso-CA2 и нажмите Open. Во втором диалоговом окне укажите созданный файл policy.inf и нажмите Open. После чего появится окно выбора сертификата подписи. После указания сертификата подписи нажмите Ok и укажите путь размещения и имя запроса сертификата. После чего выполните следующую команду:
certreq –submit path\cross.req
где path\cross.req — путь размещения и имя файла запроса для кросс-сертификата. Если появилось диалоговое окно выбора сервера CA, выберите тот, в выдаче которого находится шаблон Cross Certification Authority и нажмите Ok.
если открыть сертификат и посмотреть вкладку Certification path, можно увидеть, что цепочка этого сертификата заканчивается не на Contoso-CA1, а на Adatum-CA1. Следовательно, для данного сертификата доверие, да и наличие самого Contoso-CA1 уже не обязательно.
На данном этапе остался последний шаг — публикация кросс-сертификата в Active Directory. Для этого запустите командную строку с повышенными привилегиями (выбрав Run as administrator в контекстном меню значка Command Prompt) и выполните в ней следующую команду:
certutil –dspublish –f path\cross.cer
где path\cross.cer — путь размещения и имя файла кросс-сертификата.
Прежде чем демонтировать ненужные центры сертификации, необходимо переподписать все их CRL и поместить их в точки публикации CDP, например, LDAP и/или веб-сервер. Для этого вы должны зайти на каждый демонтируемый сервер CA и выполнить следующую команду:
cd c:\windows\system32\certsrv\certenroll\
certutil –sign.crl 1.crl now+1825:00
certutil –sign+.crl 1+.crl now+1825:00
Certutil –sign переподпишет старые CRL'ы с новым более долгим сроком, в нашем случае — на 5 лет. Т.е. эти CRL'ы будут действительны последующие 5 лет. Далее, вы должны скопировать эти CRL'ы в точки публикации. При этом следует удалить единички (которые были добавлены только для создания нового файла) из имён файлов, чтобы они совпадали с именами файлов в расширениях сертификатов.
Демонтаж старых центров сертификации следует проводить в соответствии с этим руководством: How to decommission a Windows enterprise certification authority and how to remove all related objects from Windows Server 2003 and from Windows Server 2000
Примечание: удалять следует только объекты относящиеся демонтируемым центрам сертификации. В противном случае вы можете удалить и объекты новых действующих CA.
>Если первый метод достаточно прост и нетривиален Тут, видимо, опечатка: должно быть "тривиален" вместо "нетривиален".
>Для этого создайте текстовый файл с именем Policy.inf и следующим содержанием: Не совсем понятно где (на каком компьютере) нужно производить данное действие? (предполагаю, что на Adatum-CA2, верно?) >В открывшемся диалоговом окне укажите файл сертификата Contoso-CA2 и нажмите Open. Во втором диалоговом окне укажите созданный файл policy.inf и нажмите Open. После чего появится окно выбора сертификата подписи. После указания сертификата подписи нажмите Ok и укажите путь размещения и имя запроса сертификата Из данной фразы мне не понятно, что есть такое "сертификат подписи" и где его можно раздобыть?
> Тут, видимо, опечатка: должно быть "тривиален" вместо "нетривиален". ага, опечатался. > Не совсем понятно где (на каком компьютере) нужно производить данное действие? (предполагаю, что на Adatum-CA2, верно?) по большому счёту — всё равно на каком. Можно даже на рабочей станции администратора с установленным RSAT. > Из данной фразы мне не понятно, что есть такое "сертификат подписи" и где его можно раздобыть? сертификат на основе шаблона cross-signing.
Вадимс, получается, что кросс-сертификация не позволяет избежать необходимости распространять новый корневой сертификат на клиентов?
В данном случае кросс-сертификация используется для другого, а именно чтобы удалить старый корневой сертификат с клиентов совсем и существующие сертификаты поддерживать через новый корень. Т.е. новый корневой сертификат надо распространять в любом случае.
Comments: