Windows PKI: Comment puis-je importer, signer / délivrer et exporter un grand nombre de CSR?

8

J'ai beaucoup de CSR que j'ai besoin d'avoir signé / émis et exporté dans Windows. J'espérais que je pourrais les traiter par lots d'une manière ou d'une autre (certutil semble pouvoir faire une partie du travail) mais je ne sais pas trop comment je peux y arriver. Est-ce faisable?

Toute aide serait grandement appréciée.

user183178
la source
Je pense que vous pouvez utiliser Powershell pour cela (je ne l'ai jamais fait sous Windows). Il y a pas mal d'articles à lire: rrustean.blogspot.co.uk/2010/11/… Cela vaut vraiment la peine de l'écrire sous une forme ou une autre, même si vous devez vous renseigner sur PowerShell pour le faire. Cela rend tout beaucoup plus précis.
davey

Réponses:

0

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   = '[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
la source