从 certutil 转储或通过序列号(Windows 服务器 PKI)获取颁发 CA

Get Issuing CA from certutil dump or by serial number (Windows Server PKI)

有没有办法获得通过 certutil 命令或我可以将证书序列号放入其中的某个界面颁发证书的证书颁发机构?

我们公司拥有由 5 个不同的颁发 CA 颁发的数十万个证书。 每当我通过以下方式提取完整的转储(示例)时:

certutil -view -config "Issuing-CA01" -restrict "notbefore>22/09/2021" csv > C:\Users\XYZ\Desktop\dump.csv

我在此转储中找不到有关颁发 CA 的信息,其中包含 certutil 命令可以提供的所有可能的列。与 SAN 条目一样,除了证书本身之外,任何转储都无法读取这些条目 - 但这属于不同的问题。

有什么方法可以通过命令行提取颁发 CA 吗?

Issuer 不是 ADCS 数据库架构中的列。所以唯一的办法就是把证书本身拿出来,解析它并打印出颁发者的名字。

$tempFileName = "C:\Users$env:UserName\AppData\Local\Temp\cert.cer";
& certutil -view -config "Issuing-CA01" -restrict "notbefore>22/09/2021" -out "RawCertificate" `
 | Out-File -FilePath $tempFileName;
[regex]::Matches( `
  (Get-Content $tempFileName), `
  "-----BEGIN CERTIFICATE-----[\s\r\n]{1}" + 
  "(?<cert>[a-z|A-Z|0-9|\+|\-|\|\/|\s|\r|\n|=]*)" +
  "-----END CERTIFICATE-----", `
  [System.Text.RegularExpressions.RegexOptions]::Multiline) `
    | Foreach-Object {
      [System.IO.File]::WriteAllText(`
        $tempFileName, `
        $_.Groups["cert"].Value.Replace(" ", ""));
      $certificate = `
        New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(`
          $tempFileName);

     Write-Host $certificate.Issuer;
}
Remove-Item $tempFileName;