Puedo decir que sí, es factible. Pero esto va a ser un buen trabajo, y dudo que alguien en un sitio gratuito de preguntas y respuestas en Internet se ofrezca como voluntario para hacer todo este trabajo de administrador de sistemas gratuito para usted ... dicho eso, al menos puedo ayudarlo a comenzar .
Hay dos formas principales de atacar esto. Uno, como ya ha identificado, es con certutil. Probablemente usará Powershell para escribir un "contenedor" alrededor de certutil.exe que alimente sus entradas y analice sus salidas.
En segundo lugar, están los componentes COM de Servicios de certificados CERTENROLLib, CERTCLIENTLib, etc. Estos le permiten escribir cualquier trabajo que de otro modo sería manual, siempre que esté dispuesto a realizar el espantoso esfuerzo de hacerlo.
Mire, este tipo está usando C # y las interfaces COM antes mencionadas para crear un CSR, enviar el CSR a la Autoridad de Certificación y obtener la respuesta e instalar el certificado. C # se transfiere fácilmente a Powershell.
En segundo lugar, certutil ... puede hacer la mayoría de las cosas con certutil, pero no está orientado a objetos, todo es análisis de texto como cosas de Unix del viejo mundo. Como ejemplo, compartiré con ustedes un breve script de Powershell que escribí que utiliza certutil para escanear en busca de una solicitud de certificado pendiente en una Autoridad de certificación, y alerta a los administradores si hay CSR pendientes que necesitan aprobación.
[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
}