Windows PKI : 많은 CSR을 가져오고 서명하고 발급하고 내보내려면 어떻게해야합니까?


8

Windows에서 서명 / 발급하고 내 보내야하는 많은 CSR이 있습니다. 어떻게 든 일괄 처리 할 수 ​​있기를 바랐습니다 (certutil은 일부 작업을 수행 할 수있는 것처럼 들립니다). 그러나이 작업을 수행하는 방법을 잘 모르겠습니다. 가능합니까?

도움을 주시면 감사하겠습니다.


Powershell을 사용 하여이 작업을 수행 할 수 있다고 생각합니다 (Windows에서는 한 번도 해 본 적이 없습니다). rrustean.blogspot.co.uk/2010/11/… 몇 가지 기사가 있습니다 . PowerShell에 대해 배울 필요가 있더라도이를 어떤 형태로 스크립팅하는 것이 좋습니다. 모든 것을 훨씬 더 정확하게 만듭니다.
davey

답변:



0

나는 가능하다고 말할 수 있습니다. 그러나 이것은 많은 일이 될 것입니다. 인터넷의 무료 Q & A 사이트에있는 모든 사람이 당신을 위해이 모든 무료 sysadmin 작업을하기 위해 자원 봉사 할 것이라고 의심합니다. .

이것을 공격하는 두 가지 주요 방법이 있습니다. 하나는 이미 certutil을 사용하는 것입니다. Powershell을 사용하여 입력을 공급하고 출력을 구문 분석하는 certutil.exe 주위에 "래퍼"를 작성할 수 있습니다.

둘째, Certificate Services COM 구성 요소 CERTENROLLib, CERTCLIENTLib 등이 있습니다.이를 통해 스크립트 작성의 끔찍한 노력을 기꺼이 수행하는 한 수동 작업을 스크립팅 할 수 있습니다.

봐, 이 사람은 CERT는을, CSR을 생성 인증 기관에 CSR을 제출하고 응답을 설치하기 위해 C # 및 상기 COM 인터페이스를 사용하고 있습니다. C #은 Powershell에 쉽게 이식됩니다.

둘째, certutil ... certutil을 사용하여 대부분의 작업을 수행 할 수 있지만 객체 지향적이지는 않으며 구식 유닉스와 같은 모든 텍스트 구문 분석입니다. 예를 들어, certutil을 사용하여 인증 기관에서 보류중인 인증서 요청을 검색하고 승인이 필요한 보류중인 CSR이 있으면 관리자에게 경고하는 간단한 Powershell 스크립트를 공유합니다.

[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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.