В этой части нашего цикла мы рассмотрим развертывание издающего удостоверяющего центра в двухуровневой иерархии. В отличие от корневого, этот сервер должен быть постоянно доступен клиентам, причем здесь мы имеем в виду не только возможность получения сертификатов, но и что важней, их отзыва при компрометации. Точно также, как и с корневым УЦ, перед установкой понадобится подготовить файл capolicy.inf [1] и разместить его правильном месте расположения [2].
Пример структуры capolicy.inf может выглядеть следующим образом:
[Version]
Signature=”$Windows NT$”
[PolicyStatementExtension]
Policies=InternalPolicy
[InternalPolicy]
OID=1.2.3.4.1455.67.89.5
URL=http://pki.nwtraders.msft/PKI/cps.txt
[certsrv_server]
RenewalKeyLength=2048
RenewalValidityPeriodUnits=5
RenewalValidityPeriod=Years
CRLPeriodUnits=1
CRLPeriod=Weeks
CRLOverlapUnits=1
CRLOverlapPeriod=Days
CRLDeltaPeriodUnits=1
CRLDeltaPeriod=Days
LoadDefaultTemplates=0
AlternateSignatureAlgorithm=1
Познакомиться с синтаксисом файла capolicy.inf можно в первой статье этого цикла [2].
На следующем шаге можно переходить к установке самого сервиса Active Directory Certificate Services. Установка может быть выполнена как с помощью графического интерфейса, так и с помощью команд PowerShell [3]. Второй вариант обычно проще и занимает меньше времени.
Install-AdcsCertificationAuthority –CAType EnterpriseSubordinateCA –CACommonName “IssuingCA01” –KeyLength 2048 –HashAlgorithmName SHA256 –CryptoProviderName “RSA#Microsoft Software Key Storage Provider”
В данном случае это пример команды, поскольку, как имя сервиса, так и параметры ключевой информации, алгоритмы хеширования могут отличаться в зависимости от конкретных требований. После установки сервиса будет сформирован файл запроса сертификата к корневому УЦ. Этот файл должен быть перенесен на корневой УЦ для выдачи сертификата.
С точки зрения безопасности, следует использовать внешний защищенный носитель информации для обмена и не подключать корневой центр сертификации к сети. Непосредственно для запроса сертификата можно воспользоваться утилитой certreq [4] уже на самом корневом центре сертификации.
Certreq -submit C:\test\ICA01.Nwtraders.msft_IssuingCA01.req, где test папка, в которой был сохранен файл запроса.
Далее запрос одобряется администратором и выдается сертификат для подчиненного центра сертификации.
certutil -resubmit 2
certreq –Retrieve 2 C:\test\ICA01.crt
После этого полученный сертификат переносится на издающий УЦ и устанавливается на нем.
certutil -installCert C:\test\ICA01.crt [5]
Для того чтобы издающий центр сертификатов ICA01 доверял корневому центру необходимо выполнить два действия:
Первое – опубликовать сертификат корневого центра сертификации на издающем центре сертификатов ICA01, для чего выполнить следующую команду:
certutil –addstore –f root C:\test\RootCA_ROOTCA.crt
Второе – обеспечить доступность CRL корневого центра и его сертификата, хотя бы по одному пути указанному сертификате.
После этого службу надо запустить
Start-Service CertSvc
Разумеется, все эти задачи могут быть реализованы и с помощью графического интерфейса.
Поскольку мы не еще проводили публикацию сертификата корневого УЦ и его списка отзыва в службе каталога Active Directory Domain Services, это можно будет сделать теперь, для чего выполняются команды:
certutil –dspublish –f C:\test\ROOTCA_ROOTCA.crt – публикация сертификата;
certutil –dspublish –f C:\test\ROOTCA.crl ROOTCA – публикация списка отзыва сертификатов;
ROOTCA в данной команде это имя центра сертификации.
На этом заканчивается лишь предварительный этап установки издающего УЦ, следующий шаг – настройка его параметров.
Здесь также рекомендуется пользоваться сценариями настройки для уменьшения возможных ошибок при использовании графического интерфейса.
Удалите настройки CrlDistributionPoint, заданные по-умолчанию.
Значения, которые предлагает система не предусматривают использование собственного центра распространения на внешнем WEB сервере, да и порядок публикации списка отзыва сертификатов будет не очень удачным, поскольку ссылка ведет не сам сервер сертификатов, что нельзя считать удачным решением.
Разумное решение – использование именно внешнего WEB сервера клиентами для получения сертификатов и списков отзыва.
HTTP путь рекомендуется ставить первым, поскольку это дает возможность клиентам, не имеющим доступ к службе каталога, выполнить проверку списка отзыва сертификатов.
В принципе, часто только WEB пути будет достаточно, так как любые последующие проверки выполняются лишь при невозможности выполнения первой.
Удаление путей можно выполнить с помощью PowerShell
$crllist = Get-CACrlDistributionPoint
foreach ($crl in $crllist) { Remove-CACrlDistributionPoint $crl.uri -Force }
Для добавления новых путей публикации CrlDistributionPoint выполните следующие команды:
Add-CACRLDistributionPoint -Uri C:\Windows\System32\CertSrv\CertEnroll\%3%8%9.crl -PublishToServer -PublishDeltaToServer -Force
Add-CACRLDistributionPoint -Uri http://pki.nwtraders.msft/PKI/%3%8%9.crl -AddToCertificateCDP -AddToFreshestCrl -Force [6]
Add-CACRLDistributionPoint -Uri “ldap:///CN=%7%8,CN=%2,CN=CDP,CN=Public Key Services,CN=Services,%6%10” -PublishToServer -AddToCrlCdp -AddToFreshestCrl -AddToCertificateCDP -PublishDeltaToServer -Force [6]
Если с основными компонентами приведенных команд все понятно, то ряд параметров под знаком % могут вызывать вопросы. На самом деле здесь нет ничего сложного и познакомиться с тем что обозначает какая из переменных можно по приведенной ссылке [6]
Для обеспечения автоматической публикации CRL добавьте:
Add-CACRLDistributionPoint -Uri \\pki.nwtraders.msft\pki\%3%8%9.crl -PublishToServer -PublishDeltaToServer -Force
По сравнению с корневым центром сертификатов добавляется переменная %9 (<DeltaCRLAllowed>) так как в ROOTCA список DeltaCRL отсутствует. [7]
Тоже самое следует проделать для AIA путей, то есть надо удалите настройки CAAuthorityInformationAccess, заданные по-умолчанию:
$aialist = Get-CAAuthorityInformationAccess
foreach ($aia in $aialist) { Remove-CAAuthorityInformationAccess $aia.uri -Force }
Добавить локальный путь при помощи команды PowerShell не получится, для этого придется воспользоваться графическим интерфейсом или командой certutil.
certutil -setreg CA\CACertPublicationURLs “1:C:\Windows\system32\CertSrv\CertEnroll\%3%4.crt\n1:\\pki.nwtraders.msft\pki\%3%4.crt”
Добавить пути публикации http и ldap при помощи команд PowerShell.
Add-CAAuthorityInformationAccess http://pki.nwtraders.msft/PKI/%3%4.crt -AddToCertificateAia -Force
Add-CAAuthorityInformationAccess “ldap:///CN=%7,CN=AIA,CN=Public Key Services,CN=Services,%6%11” -AddToCertificateAia -Force
Для настройки срока действия сертификата и периодичности публикации CRL используется команда certutil, мы подробно рассмотрели постустановочную настройку на примере корневого центра сертификации в предыдущей статье [7].
certutil -setreg CA\ValidityPeriodUnits 5
certutil -setreg CA\ValidityPeriod “Years”
certutil -setreg CA\CRLPeriodUnits 1
certutil -setreg CA\CRLPeriod “Weeks”
certutil -setreg CA\CRLOverlapUnits 1
certutil -setreg CA\CRLOverlapPeriod “Days”
certutil -setreg CA\CRLDeltaPeriodUnits 1
certutil -setreg CA\CRLDeltaPeriod “Days”
Для настройки параметров аудита выполните следующую команду:
certutil -setreg CA\AuditFilter 127
Перезагрузите службу сертификатов:
Restart-Service CertSvc
Опубликуйте списки CRL:
certutil -CRL
Далее нужно скопировать сертификат издающего центра сертификации центр распространения (Distribution Point).
Установка и настройка издающего центра сертификации на этом завершена, остается проверить все ли прошло успешно. Для этого используется несколько инструментов.
Графическая консоль сервера сертификатов позволит удостовериться в том, что пути к спискам отзыва и самим сертификатам УЦ изменены, параметры аудита заданы. Также следует удостовериться что клиенты получают доступ по указанным путям и могут загрузить сертификаты и списки отзыва. В нашем примере это проверка HTTP пути http://pki.nwtraders.msft/PKI/.
Дополнительно можно обратиться к реестру в разделе
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\IssuingCA01\
Где IssuingCA01 – это введенное нами при установке имя УЦ. и посмотреть значение ключей реестра:
CRLPublicationURLs
CACertPublicationURLs
ValidityPeriodUnits
ValidityPeriod
CRLPeriodUnits
CRLPeriod
CRLOverlapUnits
CRLOverlapPeriod
CRLDeltaPeriodUnits
CRLDeltaPeriod
AuditFilter
DSConfigDN
DSDomainDN
Наконец, воспользоваться консолью EnterprisePKI, запустив из командной строки утилиту pkiview.msc, в столбце «Status» для всех путей должно быть статус «OK».
Кроме этого, можно воспользоваться ADSI Edit для проверки информации в службе каталога.
Перейдите по пути CN=Public Key Services,CN=Services,CN=Configuration,DC=Nwtraders,DC=msft.
AIA – Содержит сертификаты центров сертификации, которые клиенты могут извлекать при проверке цепочки сертификатов.
CDP – Содержит CRL (базовый и дельта), которые опубликованы в AD.
Certificate Templates – cодержит шаблоны сертификатов.
Certification Authorities – cодержит сертификаты корневых центров сертификации (Root CA для нашего случая).
Enrollment Services – cодержит сертификаты центров сертификации, которые могут выдавать сертификаты в данной службе каталогов.
KRA – Содержит сертификаты (key recovery agents) агентов восстановления.
OID – Содержит информацию о OID используемых службой сертификации (Certification Authorities).
Только теперь можно говорить о том, что издающий центр сертификации установлен и практически готов к работе.
В следующей статье мы поговорим о работе с центрами распространения (Distribution Points)
Продолжение следует…
Литература
[4] PowerShell Documentation – https://docs.microsoft.com/en-us/
powershell/.