Windows PKI: ¿Cómo puedo importar, firmar / emitir y exportar una gran cantidad de CSR?

8

Tengo muchas CSR que necesito haber firmado / emitido y exportado en Windows. Esperaba poder procesarlos por lotes de alguna manera (certutil parece que puede hacer parte del trabajo) pero no estoy muy seguro de cómo puedo hacer esto. ¿Es factible?

Cualquier ayuda sería muy apreciada.

usuario183178
fuente
Creo que podría usar Powershell para hacer esto (nunca lo he hecho en Windows). Hay bastantes artículos disponibles: rrustean.blogspot.co.uk/2010/11/… Realmente vale la pena el esfuerzo de escribir esto de alguna forma, incluso si tiene que aprender sobre PowerShell para hacerlo. Hace que todo sea mucho más preciso.
davey

Respuestas:

0

Puedo decir que sí, es factible. Pero esto va a ser un buen trabajo, y dudo que alguien en un sitio gratuito de preguntas y respuestas en Internet se ofrezca como voluntario para hacer todo este trabajo de administrador de sistemas gratuito para usted ... dicho eso, al menos puedo ayudarlo a comenzar .

Hay dos formas principales de atacar esto. Uno, como ya ha identificado, es con certutil. Probablemente usará Powershell para escribir un "contenedor" alrededor de certutil.exe que alimente sus entradas y analice sus salidas.

En segundo lugar, están los componentes COM de Servicios de certificados CERTENROLLib, CERTCLIENTLib, etc. Estos le permiten escribir cualquier trabajo que de otro modo sería manual, siempre que esté dispuesto a realizar el espantoso esfuerzo de hacerlo.

Mire, este tipo está usando C # y las interfaces COM antes mencionadas para crear un CSR, enviar el CSR a la Autoridad de Certificación y obtener la respuesta e instalar el certificado. C # se transfiere fácilmente a Powershell.

En segundo lugar, certutil ... puede hacer la mayoría de las cosas con certutil, pero no está orientado a objetos, todo es análisis de texto como cosas de Unix del viejo mundo. Como ejemplo, compartiré con ustedes un breve script de Powershell que escribí que utiliza certutil para escanear en busca de una solicitud de certificado pendiente en una Autoridad de certificación, y alerta a los administradores si hay CSR pendientes que necesitan aprobación.

[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
fuente