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

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

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

有什么方法可以编写脚本/自动化此工具来提醒我 CRL 即将到期或缺少 AIA?

答案1

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

  • 枚举所有企业证书颁发机构(通过使用ICert配置界面)
  • 循环遍历每个 CA 并检索最新的 CA Exchange 证书(ICertAdmin::获取CA属性在参数CR_PROP_CAXCHGCERTPropId
  • 使用X509Chanin.Build()方法为每个 CA Exchange 证书构建链。这将为您提供所有要检查的证书。
  • 循环遍历每个证书并使用获取对象地址从 CDP 和 AIA 扩展中提取 URL 的函数。
  • 使用调用 Web 请求cmdlet 尝试从上一步收集的 URL 下载对象。
  • 报告任何失败的下载。如果下载成功,您可以设置阈值来警告即将过期或已过期的项目。

有很多方法,但我会选择这个(我计划明年研究这个问题,所以这是可能的)。

最后的建议是:如果您正在寻找可靠的解决方案,请不要依赖 certutil 输出解析,因为它的输出取决于许多因素,可能不是您期望的。

此外,如果你使用PowerShell PKI 模块。该模块已经提供了枚举企业 CA、以托管方式读取 CRL、检索 CA Exchange 证书等方法。

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

答案2

当某些事情出现问题时,MMC 将显示红色/黄色图标,但它是一个交互式控制台,没有自动化功能。我使用 powershell 调用 CERTUTIL CLI 命令来检查是否过期,并使用invoke-webrequest 来测试 AIA 的可用性。

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
}

相关内容