PKI di Windows: come posso importare, firmare / emettere ed esportare un gran numero di CSR?


8

Ho molti CSR che devo aver firmato / rilasciato ed esportato in Windows. Speravo di poterli elaborare in batch in qualche modo (sembra che Certutil riesca a fare un po 'del lavoro), ma non sono del tutto sicuro di come procedere. È fattibile?

Qualsiasi aiuto sarebbe molto apprezzato.


Penso che potresti usare Powershell per farlo (non l'ho mai fatto su Windows). Ci sono parecchi articoli da trovare: rrustean.blogspot.co.uk/2010/11/… Vale davvero la pena di scrivere questo script in qualche modo, anche se devi imparare PowerShell per farlo. Rende tutto molto più preciso.
davey,

Risposte:



0

Posso dire che sì, è fattibile. Ma questo sarà un buon lavoro, e dubito che chiunque in un sito gratuito di domande e risposte su Internet si offrirà volontario per fare tutto questo lavoro di amministratore di sistema gratuito per te ... detto questo, posso almeno iniziare .

Esistono due modi principali per attaccare questo. Uno, come hai già identificato, è con certutil. Probabilmente utilizzerai Powershell per scrivere un "wrapper" attorno a certutil.exe che lo alimenta e analizza i suoi output.

In secondo luogo, ci sono i componenti COM di Servizi certificati CERTENROLLib, CERTCLIENTLib, ecc. Questi consentono di eseguire lo script di tutti i lavori che sarebbero altrimenti manuali, purché si sia disposti a impegnarsi in modo raccapricciante di copiarlo.

Guarda, questo ragazzo sta usando C # e le suddette interfacce COM per creare un CSR, inviare il CSR all'autorità di certificazione e ottenere la risposta e installare il certificato. C # è facilmente trasferito su Powershell.

In secondo luogo, certutil ... puoi fare la maggior parte delle cose con certutil, ma non è orientato agli oggetti, è tutto il testo analizzato come roba Unix del vecchio mondo. Ad esempio, condividerò con te un breve script Powershell che ho scritto che utilizza certutil per scansionare la richiesta di certificato in sospeso su un'autorità di certificazione e avvisare gli amministratori se ci sono CSR in attesa che necessitano di approvazione.

[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
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.