PKI do Windows: Como importar, assinar / emitir e exportar um grande número de CSRs?

8

Eu tenho muitos CSRs que preciso assinar / emitir e exportar no Windows. Eu esperava poder processá-los em lote de alguma forma (o Certutil parece que pode fazer parte do trabalho), mas não tenho muita certeza de como posso fazer isso. Isso é viável?

Qualquer ajuda seria muito apreciada.

user183178
fonte
Acho que você poderia usar o Powershell para fazer isso (nunca o fiz no Windows). Existem alguns artigos disponíveis: rrustean.blogspot.co.uk/2010/11/… Realmente vale a pena o esforço de criar scripts de alguma forma, mesmo que você precise aprender sobre o PowerShell para fazer isso. Isso torna tudo muito mais preciso.
26413 davey

Respostas:

0

Posso dizer que sim, é viável. Mas isso vai ser um bom trabalho, e duvido que alguém em um site gratuito de perguntas e respostas na Internet seja voluntário para fazer todo esse trabalho de administrador de sistema gratuito para você ... isto é, posso pelo menos começar .

Existem duas maneiras principais de atacar isso. Um, como você já identificou, é o certutil. Você provavelmente usará o Powershell para escrever um "invólucro" em torno do certutil.exe que alimenta as entradas e analisa suas saídas.

Segundo, existem os componentes COM dos Serviços de Certificados, CERTENROLLib, CERTCLIENTLib, etc. Eles permitem que você crie scripts para todo e qualquer trabalho que seria manual, desde que você esteja disposto a fazer um esforço horrível de criar scripts.

Olha, esse cara está usando C # e as interfaces COM mencionadas acima para criar um CSR, enviar o CSR para a Autoridade de certificação e obter a resposta e instalar o certificado. C # é facilmente portado para o Powershell.

Em segundo lugar, certutil ... você pode fazer a maioria das coisas com certutil, mas não é orientado a objetos, é tudo análise de texto como coisas do Unix do velho mundo. Como exemplo, compartilharei com você um pequeno script do Powershell que escrevi que usa o certutil para verificar a solicitação de certificado pendente em uma Autoridade de Certificação e alerta os administradores se houver algum CSR pendente que precise de aprovação.

[String]$CAName     = 'SERVER01\MY-ISSUING-CA'
[String]$MailFrom   = '[email protected]'
[String[]]$MailTo   = '[email protected]'
[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
}
Ryan Ries
fonte