В заключительной части этой беседы мы поговорим об удалении и создании конфигураций отзыва для Online Responder.
Если так случилось, что вам какая-то конфигурация надоела или показалась скучной, вы её можете удалить. Удаляются они при помощи метода DeleteCAConfiguration:
PS C:\> $OCSPAdmin = New-Object -ComObject CertAdm.OCSPAdmin PS C:\> $OCSPAdmin.GetConfiguration("dc2",$true) PS C:\> $OCSPAdmin.OCSPCAConfigurationCollection | %{$_.Identifier} ocsp PS C:\> $OCSPAdmin.OCSPCAConfigurationCollection.DeleteCAConfiguration("ocsp") PS C:\> $OCSPAdmin.SetConfiguration("dc2",$true) PS C:\>
В качестве аргумента указываем название конфигурации (свойство Identifier). И ещё раз напоминаю, что любые изменения необходимо завершать вызовом метода SetConfiguration.
Когда мы избавились от неугодных конфигураций, мы можем создать какую-нибудь нескучную конфигурацию. И вот что нам потребуется заполнять, в зависимости от сценария использования.
Если мы создаём конфигурацию для Enterprise CA:
Подразумевается, что вы настроили права на шаблон и права на закрытый ключ (Network Service — Allow Read).
Если мы создаём конфигурацию для Standalone CA и/или для CA, который не является членом текущего леса Active Directory:
В этом случае вы самостоятельно должны доставить сертификат подписи в хранилище сертификатов и назначить права на чтение закрытого ключа для Network Service.
Новая конфигурация создаётся при помощи метода CreateCAConfiguration:
PS C:\> ipmo pspki PS C:\> $cert = (Get-CA dc2*).Certificate PS C:\> $cert Thumbprint Subject ---------- ------- E45ACBB4417260A622C9C45F4322C377A98BEC9D CN=contoso-DC2-CA, DC=contoso, DC=com PS C:\> $Config = $OCSPAdmin.OCSPCAConfigurationCollection.CreateCAConfiguration("Нескучная конфигурация для contoso-dc2 -ca",$cert.RawData) PS C:\> $config Identifier : Нескучная конфигурация для contoso-dc2-ca CACertificate : {48, 130, 4, 78...} HashAlgorithm : SigningFlags : SigningCertificate : ReminderDuration : ErrorCode : 2147483658 CSPName : KeySpec : ProviderCLSID : ProviderProperties : Modified : True LocalRevocationInformation : SigningCertificateTemplate : CAConfig : PS C:\>
Примечание: командлеты Get-CA и Get-ErrorMessage (ниже) доступны только при использовании моего пошпки модуля: http://pspki.codeplex.com/
Как видите, у нас тут толком ничего нету, кроме названия, сертификата CA и ErrorCode. Но ничего страшного, потому что:
PS C:\> "{0:x2}" -f 2147483658 8000000a PS C:\> Get-ErrorMessage 0x8000000a The data necessary to complete this operation is not yet available. PS C:\>
Код указывает нам, что кое какой информации не хватает. Итак, начинаем заполнять свойства. Но, прежде, надо разобраться со свойством SigningFlags. Оно представляет собой сумму комбинаций, которые перечислены здесь: IOCSPCAConfiguration::SigningFlags property. Заранее скажу, что для Enterprise CA нам необходимы следующие флаги:
Если все эти флажки сложить, то должно получиться что-то вроде 605 или около того. Так и запишем:
PS C:\> $Config.SigningFlags = 605 PS C:\> # указываем алгоритм хеширования и подписи PS C:\> $Config.HashAlgorithm = "SHA1" PS C:\> # указываем по истечении какого времени необходимо обновлять сертификат подписи. По умолчанию - 90% PS C:\> $Config.ReminderDuration = 90 PS C:\> # указываем GUID провайдера отзыва: PS C:\> $Config.ProviderCLSID = "{4956d17f-88fd-4198-b287-1e6e65883b19}" PS C:\> # указываем адрес сервера CA, у которого будем получать сертификаты подписи: PS C:\> $Config.CAConfig = "dc2.contoso.com\contoso-dc2-ca" PS C:\> $Config.SigningCertificateTemplate = "OCSPResponseSigning" PS C:\> $Config Identifier : Нескучная конфигурация для contoso-dc2-ca CACertificate : {48, 130, 4, 78...} HashAlgorithm : SHA1 SigningFlags : 605 SigningCertificate : ReminderDuration : 90 ErrorCode : 2147483658 CSPName : KeySpec : ProviderCLSID : {4956d17f-88fd-4198-b287-1e6e65883b19} ProviderProperties : Modified : True LocalRevocationInformation : SigningCertificateTemplate : OCSPResponseSigning CAConfig : dc2.contoso.com\contoso-dc2-ca PS C:\>
Примечание: в теории, Microsoft Online Responder может поддерживать различные типы провайдеров отзыва. Например, как-то лазить в БД самого CA и оттуда извлекать информацию о статусе запрашиваемого сертификата (например, как это делает Tumbleweed OCSP Responder). Поэтому каждому типу провайдера назначется уникальный GUID. На практике я не очень представляю, как это можно расширить и мы будем использовать CRL-based провайдер. И для него GUID всегда должен быть 4956d17f-88fd-4198-b287-1e6e65883b19.
CSP и KeySpec указывать не надо, потому что эта информация хранится в шаблоне сертификата. Теперь нам надо нстроить провайдер отзыва. По большому счёту, достаточно указать только ссылки на Base и Delta (если надо) CRL. Конфигурация отзыва создаётся при помощи интерфейса IOCSPPropertyCollection:
$OCSPPropCollection = New-Object -ComObject CertAdm.OCSPPropertyCollection [void]$OCSPPropCollection.InitializeFromProperties($null) # для получения ссылок на BaseCRL можно использовать ICertAdmin и CR_PROP_CERTCDPURLS (0x29) $CertAdmin = New-Object -ComObject CertificateAuthority.Admin $BaseCRLURLs = $CertAdmin.GetCAProperty("dc2\contoso-dc2-ca",0x29,0,4,0).split("`n", [StringSplitOptions]::RemoveEmptyEntries) [void]$OCSPPropCollection.CreateProperty("BaseCrlUrls",[String[]]$BaseCRLURLs) # ссылки на DeltaCRL надо вбивать/преобразовывать вручную. $DeltaCRLURLs = $BaseCRLURLs | %{ if ($_ -match "^http") { $_ -replace "\.crl$", "+.crl" } else { $_ -replace "\?certificateRevocationList\?","?deltaRevocationList?" } } [void]$OCSPPropCollection.CreateProperty("DeltaCrlUrls",[String[]]$DeltaCRLURLs) # записываем свойства провайдера отзыва в нашу конфигурацию $Config.ProviderProperties = $OCSPPropCollection.GetAllProperties()
PS C:\> $Config Identifier : Нескучная конфигурация для contoso-dc2-ca CACertificate : {48, 130, 4, 78...} HashAlgorithm : SHA1 SigningFlags : 605 SigningCertificate : ReminderDuration : 90 ErrorCode : 2147483658 CSPName : KeySpec : ProviderCLSID : {4956d17f-88fd-4198-b287-1e6e65883b19} ProviderProperties : {BaseCrlUrls, http://www.contoso.com/pki/contoso-DC2-CA.crl, DeltaCrlUrls, http://www.cont oso.com/pki/contoso-DC2-CA+.crl} Modified : True LocalRevocationInformation : SigningCertificateTemplate : OCSPResponseSigning CAConfig : dc2.contoso.com\contoso-dc2-ca PS C:\> $OCSPAdmin.SetConfiguration("dc2",$true) PS C:\>
И, собственно, результаты наших трудов в UI:
Профит получен. Вот так, нехитрым способом можно автоматизировать создание конфигураций для Online Responder.
з.ы. в ближайшее время я планирую доставить очередную версию пошпкимодуля и там будет целый набор классов .NET, которые позволяют проверить работоспособность и правильность настройки респондера (путём отправки запроса и декодированием ответа) в соответствии с RFC2560. Так что ждите анонсов.
Comments: