Windows PKI: Làm cách nào tôi có thể nhập, ký / phát hành và xuất một số lượng lớn CSR?


8

Tôi có rất nhiều CSR mà tôi cần phải ký / phát hành và xuất trong windows. Tôi đã hy vọng tôi có thể xử lý hàng loạt chúng bằng cách nào đó (certutil nghe có vẻ như có thể thực hiện một số công việc) nhưng tôi không chắc chắn làm thế nào tôi có thể thực hiện việc này. Nó là khả thi?

Mọi sự trợ giúp sẽ rất được trân trọng.


Tôi nghĩ bạn có thể sử dụng Powershell để làm điều này (Tôi chưa bao giờ thực hiện nó trên Windows). Có khá nhiều bài viết cần có: rrustean.blogspot.co.uk/2010/11/. Thật sự đáng để nỗ lực viết kịch bản này dưới một hình thức nào đó ngay cả khi bạn phải tìm hiểu về PowerShell để làm điều đó. Nó làm cho mọi thứ chính xác hơn nhiều.
davey

Câu trả lời:



0

Tôi có thể nói rằng có, nó là khả thi. Nhưng đây sẽ là một công việc tốt và tôi nghi ngờ bất cứ ai trên một trang web Hỏi & Đáp miễn phí trên internet sẽ tình nguyện làm tất cả công việc sysadmin miễn phí này cho bạn ... điều đó nói rằng, ít nhất tôi có thể giúp bạn bắt đầu .

Có hai cách chính để tấn công điều này. Một, như bạn đã xác định, là với certutil. Bạn có thể sẽ sử dụng Powershell để viết một "trình bao bọc" xung quanh certutil.exe để cung cấp dữ liệu đầu vào và phân tích cú pháp đầu ra của nó.

Thứ hai, có các thành phần COM Dịch vụ chứng chỉ CERTENROLLib, CERTCLIENTLib, v.v. Những thứ này cho phép bạn viết kịch bản bất kỳ và tất cả các công việc có thể là thủ công, miễn là bạn sẵn sàng đưa vào nỗ lực khủng khiếp của việc viết kịch bản.

Hãy nhìn xem, anh chàng này đang sử dụng C # và các giao diện COM đã nói ở trên để tạo CSR, gửi CSR cho Cơ quan cấp chứng chỉ và nhận phản hồi và cài đặt chứng chỉ. C # dễ dàng được chuyển đến Powershell.

Thứ hai, certutil ... bạn có thể làm hầu hết mọi thứ với certutil, nhưng nó không hướng đối tượng, tất cả đều phân tích cú pháp văn bản như các công cụ Unix thế giới cũ. Ví dụ, tôi sẽ chia sẻ với bạn một tập lệnh Powershell ngắn mà tôi đã viết sử dụng certutil để quét yêu cầu chứng chỉ đang chờ xử lý trên Tổ chức phát hành chứng chỉ và thông báo cho quản trị viên nếu có bất kỳ CSR đang chờ xử lý nào cần phê duyệt.

[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
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.