Windows PKI: Bagaimana cara saya mengimpor, menandatangani / menerbitkan, dan mengekspor sejumlah besar CSR?

8

Saya memiliki banyak CSR yang harus saya tanda tangani / keluarkan dan ekspor di windows. Saya berharap bisa mengolahnya entah bagaimana (certutil sepertinya bisa melakukan beberapa pekerjaan) tapi saya tidak yakin bagaimana saya bisa melakukan ini. Apakah itu layak?

Bantuan apa pun akan sangat dihargai.

pengguna183178
sumber
Saya pikir Anda bisa menggunakan Powershell untuk melakukan ini (saya belum pernah melakukannya di Windows). Ada beberapa artikel yang bisa didapat: rrustean.blogspot.co.uk/2010/11/... Ini sangat sepadan dengan usaha pembuatan skrip ini dalam beberapa bentuk bahkan jika Anda harus belajar tentang PowerShell untuk melakukannya. Itu membuat semuanya jauh lebih tepat.
davey

Jawaban:

0

Saya bisa bilang ya, itu layak. Tapi ini akan menjadi pekerjaan yang bagus, dan saya ragu siapa pun di situs tanya jawab gratis di internet akan secara sukarela melakukan semua pekerjaan sysadmin gratis ini untuk Anda ... yang mengatakan, setidaknya saya bisa membantu Anda memulai .

Ada dua cara utama untuk menyerang ini. Satu, seperti yang sudah Anda identifikasi, adalah dengan certutil. Anda mungkin akan menggunakan Powershell untuk menulis "pembungkus" di sekitar certutil.exe yang memberinya input dan mem-parsing outputnya.

Kedua, ada komponen COM Layanan Sertifikat CERTENROLLib, CERTCLIENTLib, dll. Ini memungkinkan Anda untuk skrip setiap dan semua pekerjaan yang akan menjadi manual, selama Anda bersedia untuk melakukan upaya mengerikan dari skrip itu.

Lihat, orang ini menggunakan C # dan antarmuka COM yang disebutkan di atas untuk membuat CSR, mengirimkan CSR ke Otoritas Sertifikat, dan mendapatkan respons dan menginstal sertifikat. C # mudah dipindahkan ke Powershell.

Kedua, certutil ... Anda dapat melakukan banyak hal dengan certutil, tetapi tidak berorientasi objek, itu semua parsing teks seperti hal-hal Unix dunia lama. Sebagai contoh, saya akan membagikan kepada Anda skrip Powershell pendek yang saya tulis yang menggunakan certutil untuk memindai permintaan sertifikat yang tertunda pada Otoritas Sertifikat, dan memperingatkan admin jika ada CSR yang tertunda yang memerlukan persetujuan.

[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
sumber