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
}