Windowsで署名/発行し、エクスポートする必要があるCSRがたくさんあります。どういうわけかそれらをバッチ処理できることを望んでいました(certutilはそれがいくつかの作業を行うことができるように聞こえます)が、これをどのように行うことができるのか私にはよくわかりません。実現可能ですか?
どんな助けでも大歓迎です。
Windowsで署名/発行し、エクスポートする必要があるCSRがたくさんあります。どういうわけかそれらをバッチ処理できることを望んでいました(certutilはそれがいくつかの作業を行うことができるように聞こえます)が、これをどのように行うことができるのか私にはよくわかりません。実現可能ですか?
どんな助けでも大歓迎です。
回答:
公開鍵インフラストラクチャPowerShellモジュールを確認してください。Approve-CertificateRequestおよびReceive-Certificateコマンドを使用すると、支援できます。
はい、それは可能です。しかし、これはかなりの作業になるだろうし、インターネット上の無料のQ&Aサイトの誰もが、このすべての無料のシステム管理作業をボランティアでやってくれるとは思えない... 。
これを攻撃する主な方法は2つあります。1つは、既に確認したように、certutilを使用する方法です。Powershellを使用して、入力をフィードし、その出力を解析するcertutil.exeの「ラッパー」を作成することになります。
2つ目は、証明書サービスのCOMコンポーネントであるCERTENROLLib、CERTCLIENTLibなどです。これらのスクリプトを使用すれば、手間のかかる作業をスクリプトで行うことができる限り、手動で行うすべての作業をスクリプトで作成できます。
見て、この男はC#と前述のCOMインターフェイスを使用してCSRを作成し、CSRを認証局に送信して、応答を取得し、証明書をインストールしています。C#は簡単にPowershellに移植できます。
第二に、certutil ... certutilでほとんどのことができますが、オブジェクト指向ではなく、古い世界のUnixのようなすべてのテキスト解析です。例として、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
}