“企业PKI”MMC是否允许对PKI进行任何自动化testing?

我正在使用企业PKIpipe理单元来诊断和检查MSFT PKI系统的运行状况。

有没有什么方法脚本/自动化这个工具来提醒我CRL的挂起到期或失踪的友邦?

不,PKIView.msc不提供任何自动化手段/function。 你必须写你自己的脚本。 我会build议(对不起,没有实际的代码,但是这样做的一种方法)是考虑以下计划和可能的工具(假设您将使用Windows PowerShell):

  • 列举所有企业authentication机构(通过使用ICertConfig接口)
  • 循环遍历每个CA并检索最新的CA Exchange证书(在PropId参数中使用CR_PROP_CAXCHGCERT ICertAdmin :: GetCAProperty )
  • 使用X509Chanin.Build()方法为每个CA Exchange证书构build链。 这将给你所有的证书来检查。
  • 循环遍历每个证书并使用CryptGetObjectUrl函数从CDP和AIA扩展中提取URL。
  • 使用Invoke-WebRequest cmdlet尝试从上一步收集的URL下载对象。
  • 报告任何失败的下载。 如果下载成功,您可以设置阈值来警告即将过期或已过期的项目。

有很多方法,但我会去这个(我打算明年在这个工作,所以这是可能的)。

和最后一个build议:如果你正在寻找一个可靠的解决scheme,不要依赖certutil输出parsing,因为它的输出取决于许多因素,可能不是你所期望的。

而且,如果您使用PowerShell PKI模块 ,则此任务将得到简化。 该模块已经提供了列举企业CA的方法,以pipe理方式读取CRL,检索CA Exchange证书等。

更新26.12.2014 :脚本的PoC现在可用: 企业PKI(pkiview.msc)PowerShell版本(PoC)

当某些事情出错时,MMC会显示红色/黄色图标,但是它是一个交互式控制台,没有自动化function。 我使用powershell来调用CERTUTIL CLI命令来检查过期,并调用web请求来testingAIA的可用性。

 gci \\servername\certenroll\*.crl | foreach { certutil -dump $_.fullname | out-string | % { $_ -match "Next CRL Publish\r\n\s+(.*)" | out-null } $expire = [datetime]$matches[1] $expire # do some date math on $expire # send some email if about to expire } $aia = "http://pki.acme.com/acme.crt" if ( (invoke-webrequest $aia).statuscode -ne 200) { # not found, send-mailmessage }