有没有办法快速禁用 Windows 7 中所有受信任的根证书?

有没有办法快速禁用 Windows 7 中所有受信任的根证书?

(我之前已经把这个发布给超级用户了)

我想暂时禁用所有受信任的根证书,并想知道是否有比逐一检查更快捷的方法,右键单击“属性”并选择“禁用此证书的所有用途”(然后在 mmc 中的列表滚动回顶部后尝试找到我离开的地方)?

答案1

正如@Grant提到的,Powershell可用于从存储中删除(实际上禁用)证书。可以在删除之前进行导出,以便您可以将其重新导入到存储中。

要从商店导出和删除:

Add-Type -AssemblyName System.Security

$exportPath = 'c:\temp\certexport'

$certStore = New-Object System.Security.Cryptography.X509Certificates.X509Store -ArgumentList 'Root', 'LocalMachine'

$certStore.Open('ReadWrite')

foreach ($cert in $certStore.Certificates) {

    # Export cert to a .cer file.
    $certPath = Join-Path -Path $exportPath -ChildPath "$($cert.Thumbprint).cer"
    [System.IO.File]::WriteAllBytes($certPath, $cert.Export('Cert'))

    # Remove the cert from the store.
    $certStore.Remove($cert)

}
$certStore.Close()

要将它们重新导入到商店:

Add-Type -AssemblyName System.Security

$exportPath = 'c:\temp\certexport'

$certStore = New-Object System.Security.Cryptography.X509Certificates.X509Store -ArgumentList 'Root', 'LocalMachine'

$certStore.Open('ReadWrite')

Get-ChildItem -Path $exportPath -Filter *.cer | ForEach-Object {

    $cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate($_.FullName)

    $certStore.Add($cert)
}
$certStore.Close()

答案2

Powershell 似乎没有任何方法可以禁用证书。这有点令人惊讶,也许我错过了它们。但它确实有导入、导出和删除证书的命令。

可以(并使用快照或其他方式从虚拟机进行测试,以防第一次修订不起作用)编写一个 powershell 脚本来导出所有证书,将其全部删除,在执行任何操作时暂停,然后再次导入它们。

这并不完全与禁用它们产生相同的结果,但由于您没有说明为什么这样做,因此它可能足够接近您的目的。

我认为禁用证书与将其标记为不受信任的效果相同。如果是这种情况,您可能能够选择所有证书并将其拖到不受信任的证书存储中。但请检查其中已有的内容 - 完成后,您不会想将任何现有的不受信任证书移回原处。

相关内容