Windows PKI:如何导入,签名/签发和导出大量CSR?


8

我需要在Windows中签名/签发和导出很多CSR。我希望可以以某种方式对它们进行批处理(certutil听起来像它可以完成一些工作),但是我不太确定如何去做。可行吗

任何帮助将不胜感激。


我认为您可以使用Powershell来做到这一点(我从未在Windows上做到过)。有很多文章供您参考: rrustean.blogspot.co.uk/2010/11/… 即使您必须了解PowerShell才能以某种形式编写脚本,这确实值得付出努力。它使一切都更加精确。
戴维

Answers:



0

我可以说是可行的。但这将是很多工作,而且我怀疑互联网上免费问答网站上的任何人都会自愿为您完成所有这些免费的系统管理员工作...也就是说,我至少可以帮助您入门。

有两种主要的攻击方法。正如您已经确定的那样,其中之一是certutil。您可能会使用Powershell在certutil.exe周围编写一个“包装器”,以提供输入并解析其输出。

其次,还有证书服务COM组件CERTENROLLib,CERTCLIENTLib等。只要您愿意付出艰巨的工作来编写脚本,这些脚本就可以使您编写任何其他手工编写的工作。

看,这个家伙正在使用C#和前面提到的COM接口来创建CSR,将CSR提交给证书颁发机构,并获得响应并安装证书。C#很容易移植到Powershell。

其次,certutil ...您可以使用certutil进行大多数操作,但是它不是面向对象的,而是像旧版Unix之类的所有文本解析程序。例如,我将与您分享一个简短的Powershell脚本,该脚本是我编写的,使用certutil扫描证书颁发机构上的挂起证书请求,并向管理员发出警告,告知是否有任何挂起的CSR需要批准。

[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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.