Включить политику регистрации сертификатов и запросить сертификат с помощью PowerShell

9

Сейчас я делаю следующее для запроса сертификата с сервера CEP:

  • Откройте gpedit.msc
  • В разделе «Конфигурация компьютера»> «Параметры Windows»> «Параметры безопасности»> «Политики открытых ключей» дважды щелкните «Клиент служб сертификации - Политика регистрации сертификатов».
  • включить
  • Введите CEP URI
  • Переключиться на имя пользователя / пароль аутентификации
  • Проверить (предоставить кредиты)
  • Откройте MMC и импортируйте сертификаты
  • Перейти в Сертификаты> Личные
  • Щелкните правой кнопкой мыши> Запросить новый сертификат
  • Введите «дополнительную информацию» (CN, DNS Name и т. Д.)
  • Предоставить кредиты

После этого у меня есть сертификат от CEP; Тем не менее, это болезненный процесс, чтобы сделать вручную. Есть ли способ автоматизировать это в Server 2008 (и 2012)? Вся информация, которую я могу найти по этому поводу, говорит о том, как установить службы CEP, чтобы сделать сервер сервером политики регистрации (ничего о фактическом запросе нового сертификата или включении его на стороне клиента). Можно ли это автоматизировать?

Похоже, этот процесс добавляет много данных в HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptography. Могу ли я добавить это вручную (и подделать GUID / ServiceID)?

EGR
источник
1
Не обескураживать ваш энтузиазм, так как я также люблю подправлять все вещи !!!!!! но командлеты групповой политики по-прежнему абсолютно ужасны, и командлеты PKI значительно улучшены в v4 по сравнению с v3, поэтому ... :( Однако я считаю этот сторонний модуль PKI для модуля PowerShell полезным, и может потребоваться ручная боль, что вы пытаетесь сделать
HopelessN00b

Ответы:

3

Я предполагаю, что ваши запросы на сертификаты сделаны с использованием шаблона. Если это так, используйте Public Key Policies/Certificate Services Client - Auto-Enrollment SettingsGPO для принудительной автоматической регистрации. Вы также должны убедиться, что ACL шаблона имеет Enrollи AutoEnrollпомечен для компьютеров домена или пользователей домена (или любого объекта acl, в зависимости от предполагаемой аудитории). Существует пользовательская конфигурация и политика конфигурации компьютера, которые можно использовать в зависимости от того, является ли это компьютером. сертификат или пользовательский сертификат, который вы пытаетесь подтолкнуть. Регистрация начинается, как только политика выдвигается (обычно около 15 минут) после того, как объект групповой политики связан и применяется.

Colyn1337
источник
2
Ну да. Я настолько зациклился на части PowerShell, что полностью упустил из виду тот факт, что я создал много-много объектов групповой политики для автоматизации регистрации сертификатов в течение многих лет. D'о! Хороший улов.
HopelessN00b
Это, безусловно, вариант (вероятно, лучший вариант), но я бы предпочел установить параметр локальной групповой политики. Возможно ли это?
EGr
2
@EGr, почему в мире ты хочешь это сделать?
MDMoore313
@ HopelessN00b Я сделал то же самое, но было бы круто иметь способ PowerShell сделать это для устранения неполадок, по крайней мере, так что это все еще довольно хороший вопрос.
MDMoore313
1

Это процесс, который я использовал в Windows 2012 R2 и выше. Весь код PowerShell был запущен из командной строки PowerShell с повышенными правами. Полная автоматизация оставлена ​​как упражнение для пользователя.

необходимое условие

Убедитесь, что на вашем сервере сертификатов есть шаблон, для которого на вкладке «Тема» выбран переключатель «Поставка в запросе». Поскольку это не машина AD, сервер сертификатов не может адекватно запрашивать информацию в Active Directory.

Экспорт корня

Экспортируйте сертификат доверенного корневого центра сертификации на свой сервер сертификатов, а затем скопируйте этот файл сертификата на целевой сервер.

certutil --% -ca.cert <name of certificate file>

Доверься корню

Импортируйте этот сертификат в доверенный корневой центр сертификации на целевом сервере.

$PathToCertificate=<name of certificate file>
$RootCertificate=Get-PfxCertificate -FilePath $PathToCertificate
$AlreadyExists=Get-ChildItem -Path "Cert:\LocalMachine\Root" | Where-Object { $_.Thumbprint -eq $RootCertificate.Thumbprint }
if ($AlreadyExists -eq $null) { Import-Certificate -CertStoreLocation "Cert:\LocalMachine\Root" -FilePath $PathToCertificate }
else { Write-Warning "Root certificate already installed" }

Поставщик политик Active Directory

Определите URL-адрес для поставщика политики Active Directory

# Get AD Configuration Context
$RootDSE=[System.DirectoryServices.DirectoryEntry]::new("LDAP://RootDSE")
$ConfigContext="CN=Enrollment Services,CN=Public Key Services,CN=Services,"+$RootDSE.configurationNamingContext
# Get name of Enterprise Root Certificate Autority server
$Server=Get-ADObject -SearchBase $ConfigContext -Filter "*"
if ($Server.Count -eq 1) { throw "No Enterprise Root Certificate Autority server exists" }
else { $Server=$Server[1].Name }
# Get Enrollment URL
$ConfigContext="CN=$Server,"+$ConfigContext
$EnrollmentURL=(Get-ADObject -SearchBase $ConfigContext -Filter "*" -Properties "msPKI-Enrollment-Servers" | Select-Object -ExpandProperty "msPKI-Enrollment-Servers").Split("`n") | Where-Object { $_ -like "http*" }
if ($EnrollmentURL -eq $null) { $EnrollmentURL="" }
# Get AD Enrollment Policy URL
$Server=$Server+$RootDSE.configurationNamingContext.Value.Replace("CN=Configuration","").Replace(",DC=",".")
$WMI=Get-WmiObject -ComputerName $Server -Namespace "root\WebAdministration" -Class Application | Where-Object { $_.Path -eq "/ADPolicyProvider_CEP_UsernamePassword" }
if ($WMI -ne $null) { $PolicyURL="https://"+$Server+$WMI.Path+"/service.svc/CEP" }
else { $PolicyURL="" }
Write-Output "Enrollment URL = $EnrollmentURL"
Write-Output "Policy URL = $PolicyURL"

Политика регистрации

Добавьте политику регистрации на целевой сервер (это работает только в Windows 2012 и выше. Инструкции по графическому интерфейсу см. Ниже). Убедитесь, что политика добавлена ​​после создания шаблона, не относящегося к домену, иначе он не будет отображаться, поскольку политика не обновляется.

$User="<your domain name>\<your domain user name>"
$Pass="<Your domain password>"
$SecPass=ConvertTo-SecureString -String $Pass -AsPlainText -Force
$Cred=[System.Management.Automation.PSCredential]::new($User,$SecPass)
Add-CertificateEnrollmentPolicyServer -Url $PolicyURL -context Machine -NoClobber -AutoEnrollmentEnabled -Credential $Cred

Получить сертификат

Теперь вы должны иметь возможность зарегистрироваться на сертификат, используя нужный шаблон

$DNS="<FQDN of your server>"
$URL=Get-CertificateEnrollmentPolicyServer -Scope All -Context Machine | Select-Object -ExpandProperty Url | Select-Object -ExpandProperty AbsoluteUri
$Enrollment=Get-Certificate -Url $URL -Template "<Template name (not display name)>" -SubjectName "CN=$DNS" -DnsName $DNS -Credential $Cred -CertStoreLocation cert:\LocalMachine\My
$Enrollment.Certificate.FriendlyName=$DNS

Политика регистрации до Windows 2012 R2

  1. Откройте сертификаты MMC
  2. Развернуть до магазина личных сертификатов
  3. Щелкните правой кнопкой мыши «Сертификаты» и выберите «Все задачи» / «Дополнительные операции» / «Управление»
  4. Политики регистрации из контекстного меню
  5. Нажмите кнопку «Добавить»
  6. Вставьте URL-адрес для политики регистрации
  7. Выберите имя пользователя / пароль в качестве типа аутентификации
  8. Нажмите кнопку «Проверить сервер» и введите учетные данные вашего домена, включая домен
  9. Предполагая, что вы смогли успешно подтвердить, нажмите кнопку «Добавить»
  10. Выберите политику регистрации и нажмите кнопку «Свойства»
  11. Убедитесь, что установлен флажок «Включить автоматическую регистрацию и продление»
  12. Я никогда не проверял «Требовать строгой проверки при регистрации», поэтому я не знаю, что он делает
Слогмейстер экстраординарный
источник
0

У меня нет полного решения, однако я могу посоветовать стартовые точки. Мой модуль PowerShell PKI позволяет регистрировать конечную точку службы регистрации, начиная с Windows 7 / Windows Server 2008 R2 (обратите внимание, что Windows Server 2008 не поддерживает службы регистрации). Вот пример того, как зарегистрировать политику: http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID=101

относительно зачисления. Эта серия публикаций в блоге может дать вам некоторое представление о том, как использовать COM-интерфейсы CertEnroll для регистрации сертификатов в PowerShell. В веб-сервисах регистрации нет ничего (к сожалению), но методы те же. Вам нужно будет начать с этого интерфейса: IX509CertificateRequestPkcs10V2

НТН

Crypt32
источник