Windows에서 서명 / 발급하고 내 보내야하는 많은 CSR이 있습니다. 어떻게 든 일괄 처리 할 수 있기를 바랐습니다 (certutil은 일부 작업을 수행 할 수있는 것처럼 들립니다). 그러나이 작업을 수행하는 방법을 잘 모르겠습니다. 가능합니까?
도움을 주시면 감사하겠습니다.
Windows에서 서명 / 발급하고 내 보내야하는 많은 CSR이 있습니다. 어떻게 든 일괄 처리 할 수 있기를 바랐습니다 (certutil은 일부 작업을 수행 할 수있는 것처럼 들립니다). 그러나이 작업을 수행하는 방법을 잘 모르겠습니다. 가능합니까?
도움을 주시면 감사하겠습니다.
답변:
공개 키 인프라 PowerShell 모듈을 확인하십시오 . Approve-CertificateRequest 및 Receive-Certificate 명령으로 도움을받을 수 있습니다.
나는 가능하다고 말할 수 있습니다. 그러나 이것은 많은 일이 될 것입니다. 인터넷의 무료 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
}