Есть ли способ быстро отключить все доверенные корневые сертификаты в Windows 7?


5

(Я отправил это ранее суперпользователю)

Я хотел бы временно отключить все доверенные корневые сертификаты и задаться вопросом, есть ли более быстрый способ, чем пройти через каждый из них, щелкнуть правой кнопкой мыши Свойства и выбрать «Отключить все цели для этого сертификата» (а затем попытаться найти, где я остановился после того, как список в mmc прокручивает обратно наверх)?


1
Я подозреваю, что вам, вероятно, нужно будет найти решение в Powershell. Сертификаты в Cert:\LocalMachine\Root. Там может быть способ отключить сертификаты.
Зоредаче

Я написал здесь, потому что мне сказали, что SF может быть лучше для вопроса.
Золи

1
@zoli, если кто-то считает, что ваш вопрос лучше подходит для другого сайта, исходный вопрос следует перенести. Сообщество будет часто делать это по умолчанию для хороших вопросов, которые явно соответствуют другому сайту. Вы также можете пометить вопрос для модератора и запросить миграцию.
Зоредаче

Ответы:


4

Как упоминалось в @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()

+1 за написание сценария, на который я ссылался.
Грант

2

Похоже, у Powershell нет возможности отключить сертификаты. Что удивительно, возможно, я скучал по ним. Но у него есть команды для импорта, экспорта и удаления.

Можно (и проверить это с виртуальной машины со снимками или что-то в случае, если первая ревизия не сработает) написать скрипт powershell для экспорта всех сертификатов, их удаления, приостановки, пока вы делаете то, что вы делаете, а затем импортировать их снова.

Это не дает таких же результатов, как их отключение, но, поскольку вы не говорите, почему вы это делаете, это может быть достаточно близко для ваших целей.

Я считаю, что отключение сертификата делает то же самое, что и пометить его как ненадежное. Если это так, вы можете выбрать их все и перетащить в хранилище ненадежных сертификатов. Но проверьте, что там уже есть - вы не захотите возвращать существующие ненадежные обратно, когда закончите.


1
Спасибо! Цель, которую я хотел сделать, это проверить, как ведет себя некоторый код, когда он устанавливает соединение SSL и не может проверить сертификаты сервера.
zoli

2
@zoli Просто помните, что некоторые приложения ведут себя по-разному для отсутствующего сертификата, чем для одного, явно помеченного как ненадежный.
Грант

-2

Вне сценария PowerShell, на который есть ссылка выше, нет быстрого способа пакетной обработки, просто способ, которым вы делаете это вручную.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.