Windows PKI: Как я могу импортировать, подписывать / выпускать и экспортировать большое количество CSR?

8

У меня есть много CSR, которые мне нужно подписать / выдать и экспортировать в Windows. Я надеялся, что смогу обработать их как-нибудь (по-видимому, certutil может выполнять часть работы), но я не совсем уверен, как мне это сделать. Это возможно?

Любая помощь будет принята с благодарностью.

user183178
источник
Я думаю, что вы могли бы использовать Powershell для этого (я никогда не делал это на Windows). Есть довольно много статей, которые нужно опубликовать : rrustean.blogspot.co.uk/2010/11/… Это действительно стоит того, чтобы написать сценарий в той или иной форме, даже если вам нужно изучить PowerShell, чтобы это сделать. Это делает все намного более точным.
Дэйви

Ответы:

0

Я могу сказать, что да, это возможно. Но это будет большая работа, и я сомневаюсь, что кто-то на бесплатном сайте вопросов и ответов в Интернете собирается добровольно выполнить всю эту бесплатную работу сисадмина для вас ... при этом я сказал, что я могу, по крайней мере, начать вас ,

Есть два основных способа атаковать это. Один из них, как вы уже определили, относится к 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
}
Райан Райс
источник