0

有没有办法让证书颁发机构通过 certutil 命令或通过某个接口颁发证书,我可以将证书的序列号放入其中?

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

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

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

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

4

1 回答 1

0

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;
于 2021-09-22T15:24:59.487 回答