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

8

Eu tenho muitos CSRs que preciso ter assinado / emitido e exportado no Windows. Eu estava esperando que eu pudesse processá-los em lote de alguma forma (certutil parece que pode fazer parte do trabalho), mas não tenho certeza de como posso fazer isso. É viável?

Qualquer ajuda seria muito apreciada.

    
por user183178 26.07.2013 / 12:37

2 respostas

1

Verifique o módulo PowerShell Infraestrutura de chave pública . O comando Approve-CertificateRequest e Receive-Certificate permite ajudá-lo.

    
por 11.06.2015 / 22:25
0

Posso dizer que sim, é viável. Mas isso vai ser uma boa dose de trabalho, e eu duvido que alguém em um Q & Um site gratuito na internet se ofereça para fazer todo esse trabalho de administrador de sistema gratuito para você ... que dizem que eu posso pelo menos você começou.

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

Em segundo lugar, há os componentes CERTENROLLib, CERTCLIENTLib, etc. dos Serviços de Certificados. Eles permitem que você crie scripts de todo e qualquer trabalho que, de outra forma, seria manual, contanto que você esteja disposto a fazer um esforço .

Veja, esse cara está usando o C # e as interfaces COM acima mencionadas 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 o certutil, mas não é orientado a objetos, é todo o texto analisado como coisas do Unix do mundo antigo. Como exemplo, compartilharei com você um pequeno script Powershell que eu 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
}
    
por 19.09.2014 / 18:23