答案1
使用 certutil 很简单:
certutil -delstore Root <CRLHash>
certutil -delstore CA <CRLHash>
不幸的是,PowerShell 和 .NET 没有提供内置方法来枚举存储中的 CRL,也不支持 CRL 对象。如果您需要完全受控的方法,那么您将必须调用 Win32 函数:https://docs.microsoft.com/en-us/windows/win32/seccrypto/cryptography-functions#certificate-and-certificate-store-functions,这是一项大量的编程工作。
答案2
Powershell:列表(我按发行者列出,但您可以调整),一个要删除。
获取 CA 存储中所有 CRL 哈希的列表:
$crlHashes = ls HKLM:\Software\Microsoft\SystemCertificates\CA\CRLs | %{$_.name.split(" \ ")[6]}
将哈希与发行者关联起来,这样你就知道它来自哪里:
$crlHashes | foreach-object {Write-Host; Write-Host "哈希:$“; certutil-store CA $| findstr 发行人}
然后使用之前发布的相同命令来决定删除哪些:
certutil -delstore CA <哈希>
然后,您可以使用 if/then 自动化,例如“如果发行人 = <某人>,则删除”