У меня есть много CSR, которые мне нужно подписать / выпустить и экспортировать в Windows. Я надеялся, что смогу каким-то образом обработать их в пакетном режиме (похоже, что certutil может выполнять часть работы), но я не совсем уверен, как я могу это сделать. Насколько это возможно?
Любая помощь будет принята с благодарностью.
Проверьте Модуль PowerShell инфраструктуры открытого ключа. Команды Approve-CertificateRequest и Receive-Certificate могут вам помочь.
Могу сказать, что да, это возможно. Но это будет большая работа, и я сомневаюсь, что кто-то на бесплатном сайте вопросов и ответов в Интернете будет добровольно выполнять всю эту бесплатную работу системного администратора за вас ... при этом я могу по крайней мере помочь вам начать .
Есть два основных способа противодействовать этому. Один из них, как вы уже определили, связан с certutil. Скорее всего, вы будете использовать Powershell, чтобы написать «оболочку» для certutil.exe, которая будет вводить и анализировать его выходные данные.
Во-вторых, есть COM-компоненты служб сертификации CERTENROLLib, CERTCLIENTLib и т. Д. Они позволяют вам создавать сценарии для любой работы, которая в противном случае выполнялась бы вручную, если вы готовы приложить ужасные усилия для ее написания.
Смотреть, этот парень использует C # и вышеупомянутые интерфейсы COM для создания CSR, отправки CSR в центр сертификации, получения ответа и установки сертификата. C # легко переносится на Powershell.
Во-вторых, certutil ... вы можете делать большинство вещей с помощью certutil, но он не объектно-ориентированный, это весь текстовый синтаксический анализ, как старые вещи Unix. В качестве примера я поделюсь с вами коротким сценарием Powershell, который я написал, который использует certutil для сканирования ожидающих запросов сертификатов в центре сертификации и предупреждает администраторов, если есть какие-либо ожидающие CSR, которые требуют утверждения.
[String]$CAName = 'SERVER01\MY-ISSUING-CA'
[String]$MailFrom = 'noreply@mydomain.com'
[String[]]$MailTo = 'CA-Team@domain.com'
[String]$SMTPServer = 'smtp.domain.com'
$Output = certutil -view -out "Request ID, Request Submission Date, Request Common Name, Requester Name, Request Email Address, Request Distinguished Name" -Restrict "Request Disposition=9"
If ($Output[-1] -NotLike '*successfully.')
{
Write-Error $Output
$Body = "<p>An error occurred on $CAName while checking for pending certificate requests.</p><pre>"
Foreach ($Line In $Output)
{
$Body += "$Line" + [Environment]::NewLine
}
$Body += "</pre>"
Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -To $MailTo -Subject "$CAName Encountered An Error!" -Body $Body -BodyAsHtml
Return
}
[Int]$NumberOfRequests = 0
If ([Int]::TryParse($Output[-2].Trim().Split(' ')[0], [ref] $NumberOfRequests))
{
If ($NumberOfRequests -GT 0)
{
$Body = "<p>There are pending certificate requests on $CAName.</p><pre>"
Foreach ($Line In $Output)
{
$Body += "$Line" + [Environment]::NewLine
}
$Body += "</pre>"
Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -To $MailTo -Subject "$CAName Has Pending Requests" -Body $Body -BodyAsHtml
}
Else
{
Write-Host "No pending certificate requests found."
}
}
Else
{
$Body = "<p>An error occurred on $CAName while checking for pending certificate requests.</p><pre>"
Foreach ($Line In $Output)
{
$Body += "$Line" + [Environment]::NewLine
}
$Body += "</pre>"
Send-MailMessage -SmtpServer $SMTPServer -From $MailFrom -To $MailTo -Subject "$CAName Encountered An Error!" -Body $Body -BodyAsHtml
}