Windows PKI: Wie kann ich eine große Anzahl von CSRs importieren, signieren / ausgeben und exportieren?

8

Ich habe viele CSRs, die ich in Windows signiert / ausgestellt und exportiert haben muss. Ich hatte gehofft, ich könnte sie irgendwie stapelweise verarbeiten (certutil klingt so, als könnte es einen Teil der Arbeit erledigen), aber ich bin mir nicht ganz sicher, wie ich das machen soll. Ist es machbar?

Jede Hilfe wäre sehr dankbar.

user183178
quelle
Ich denke, Sie könnten Powershell verwenden, um dies zu tun (ich habe es nie unter Windows getan). Es gibt eine ganze Reihe von Artikeln: rrustean.blogspot.co.uk/2010/11/… Es lohnt sich wirklich, Skripte in irgendeiner Form zu erstellen, selbst wenn Sie etwas über PowerShell lernen müssen, um dies zu tun. Es macht alles viel präziser.
Dave

Antworten:

0

Ich kann sagen, dass es machbar ist. Aber das wird eine Menge Arbeit sein, und ich bezweifle, dass sich jemand auf einer kostenlosen Q & A-Site im Internet freiwillig bereit erklärt, all diese kostenlose Sysadmin-Arbeit für Sie zu erledigen ... das heißt, ich kann Ihnen zumindest den Einstieg erleichtern .

Es gibt zwei Hauptmethoden, um dies anzugreifen. Eine ist, wie Sie bereits identifiziert haben, mit certutil. Sie werden wahrscheinlich Powershell verwenden, um einen "Wrapper" um certutil.exe zu schreiben, der die Eingaben speist und die Ausgaben analysiert.

Zweitens gibt es die Certificate Services COM-Komponenten CERTENROLLib, CERTCLIENTLib usw. Mit diesen können Sie alle Arbeiten skripten, die sonst manuell ausgeführt würden, solange Sie bereit sind, die grausamen Anstrengungen zu unternehmen, um Skripte zu erstellen.

Schauen Sie, dieser Typ verwendet C # und die oben genannten COM-Schnittstellen, um eine CSR zu erstellen, die CSR an die Zertifizierungsstelle zu senden, die Antwort zu erhalten und das Zertifikat zu installieren. C # lässt sich leicht nach Powershell portieren.

Zweitens, certutil ... Sie können die meisten Dinge mit certutil tun, aber es ist nicht objektorientiert, es ist alles Textanalyse wie Unix-Zeug der alten Welt. Als Beispiel werde ich Ihnen ein kurzes Powershell-Skript mitteilen, das ich geschrieben habe und das certutil verwendet, um nach ausstehenden Zertifikatanforderungen bei einer Zertifizierungsstelle zu suchen, und die Administratoren benachrichtigt, wenn ausstehende CSRs vorhanden sind, die genehmigt werden müssen.

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