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 = '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
}