Установка / удаление корневого сертификата без CertMgr / CertUtil, запрашивающего у конечного пользователя подтверждение
Когда вы устанавливаете или удаляете сертификат корневого ЦС с помощью инструментов командной строки CertUtil.exe или CertMgr.exe, Windows запрашивает у пользователя подтверждение с помощью MessageBox (для сертификатов, отличных от корневого ЦС, этот вопрос не задается), даже для корневого Хранилище сертификатов CA для текущего пользователя.
Для автоматических обновлений сертификатов это хлопотно.
Я видел такое поведение в Windows XP, Vista и 7 (я еще не проверял Windows Server 2003 и 2008, но я предполагаю, что они также задают этот вопрос).
У меня есть два вопроса:
- Почему Windows задает этот вопрос, даже если вы устанавливаете / удаляете его из инструмента командной строки?
- Как я могу подавить это (кроме наблюдения за появлением диалоговых окон и отправкой сообщений Windows для нажатия кнопки "Да")?
Диалог подтверждения MessageBox выглядит следующим образом:
[Root Certificate Store]
Do you want to DELETE the following certificate from the Root Store?
...
[&Yes] [&No]
и это:
[Security Warning]
You are about to install a certificate from a certification authority (CA) claiming to represent:
...
[&Yes] [&No]
--jeroen
3 ответа
Самое простое решение - включить ответ в скрипт следующим образом:
echo Y | CertUtil.exe ....
Этот метод не всегда работает для всех программ, поэтому он все еще нуждается в некотором тестировании на вашей стороне.
Для окон сообщений вы можете использовать nircmd с dlg
параметр.
В сценарии вы также можете использовать встроенную команду timeout /t seconds
дать окну сообщения заданное количество секунд, в течение которых появиться.
Вот выдержка из файла справки:
nircmd.exe dlg [Process Name] [Window Title] [Action] [Parameters]
Позволяет взаимодействовать со стандартными диалоговыми окнами и окнами сообщений Windows. Когда диалоговое окно открыто, вы можете использовать эту команду, чтобы "щелкнуть" по кнопкам ok/cancel/yes/no или заполнить текстовые поля в диалоговом окне.
Следующая команда выберет ответ "Да" для любого диалогового окна вопроса процесса Explorer:
dlg "explorer.exe" "" click yes
Следующая команда выберет ответ "Отмена" для любого диалогового окна вопроса любого процесса:
dlg "" "" click cancel
Описание параметров:
[Имя процесса]: указывает процесс, который создал желаемое окно. Вы можете указать только имя процесса или полный путь процесса. Если этот параметр является пустой строкой (""), команда будет выполнена в любом процессе.
[Заголовок окна]: указывает заголовок окна, в котором вы хотите выполнить действие. Если этот параметр является пустой строкой (""), команда будет выполнена в любом окне, независимо от заголовка окна.
[Действие]: вы можете указать один из следующих параметров:
щелкните: нажмите указанную кнопку. Вы можете указать одно из следующих предопределенных значений (только для стандартных диалоговых окон Windows!): Да, нет, ок, отмена, повтор, игнорирование, закрытие, помощь. Вы также можете указать любой идентификатор элемента управления в виде числового значения.
settext: установить текст указанного элемента управления. Первый параметр этого действия указывает идентификатор элемента управления, а второй параметр - текст.
В таких случаях, как удаление доверенного корневого сертификата из хранилища пользователя, для которого не требуется какое-либо стороннее программное обеспечение, я прибегаю к удалению сертификата из реестра с помощью reg delete. Обратите внимание, что X ниже представляет собой отпечаток сертификата.
reg delete HKCU\Software\Microsoft\SystemCertificates\Root\Certificates\XXXXXXXXXXXXXXXXXXXXXXX /f
Если вы, как и я, искали ответ "да" в окне certutil.exe через nircmd, выполните команду.
C:\Users\<user>\Desktop>nircmdc.exe dlg "certutil.exe" "" click yes execmd certutil.exe -p xxxxx -user -importpfx cert.p12