Je peux dire que oui, c'est faisable. Mais cela va être beaucoup de travail, et je doute que quiconque sur un site de questions / réponses gratuit sur Internet se porte volontaire pour faire tout ce travail d'administrateur système gratuit pour vous ... cela dit, je peux au moins vous aider à démarrer .
Il existe deux façons principales d'attaquer cela. Un, comme vous l'avez déjà identifié, est avec certutil. Vous utiliserez probablement Powershell pour écrire un "wrapper" autour de certutil.exe qui alimente ses entrées et analyse ses sorties.
Deuxièmement, il y a les composants COM des services de certificats CERTENROLLib, CERTCLIENTLib, etc. Ceux-ci vous permettent de scripter tout travail qui serait autrement manuel, tant que vous êtes prêt à faire l'effort horrible de l'écrire.
Regardez, ce type utilise C # et les interfaces COM susmentionnées pour créer un CSR, soumettre le CSR à l'autorité de certification, obtenir la réponse et installer le cert. C # est facilement porté sur Powershell.
Deuxièmement, certutil ... vous pouvez faire la plupart des choses avec certutil, mais ce n'est pas orienté objet, c'est tout l'analyse de texte comme les trucs Unix du vieux monde. À titre d'exemple, je vais partager avec vous un court script Powershell que j'ai écrit qui utilise certutil pour analyser la demande de certificat en attente sur une autorité de certification, et alerte les administrateurs s'il existe des CSR en attente qui nécessitent une approbation.
[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
}