Установка / удаление корневого сертификата без CertMgr / CertUtil, запрашивающего у конечного пользователя подтверждение

15021
Jeroen Wiert Pluimers

Когда вы устанавливаете или удаляете сертификат корневого ЦС с помощью инструментов командной строки CertUtil.exe или CertMgr.exe, Windows запрашивает у пользователя подтверждение с помощью MessageBox (для сертификатов, отличных от корневого ЦС, этот вопрос не задается), даже для корневого CA сертификат хранилище для текущего пользователя.

Для автоматических обновлений сертификатов это хлопотно.

Я видел такое поведение в Windows XP, Vista и 7 (я еще не проверял Windows Server 2003 и 2008, но я предполагаю, что они также задают этот вопрос).

У меня есть два вопроса:

  1. Почему Windows задает этот вопрос, даже если вы устанавливаете / удаляете его из инструмента командной строки?
  2. Как я могу подавить это (кроме наблюдения за появлением диалоговых окон и отправкой сообщений 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

2

2 ответа на вопрос

5
harrymc

Самое простое решение - включить ответ в скрипт следующим образом:

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: установить текст указанного элемента управления. Первый параметр этого действия указывает идентификатор элемента управления, а второй параметр - текст.

Это не работает с ящиками сообщений, которые Windows использует для запроса подтверждения. (Я отредактировал свой вопрос, чтобы сделать использование MessageBoxes Windows более понятным). Jeroen Wiert Pluimers 13 лет назад 0
@Jeroen Pluimers: ОК - добавлено. harrymc 13 лет назад 1
Спасибо! Это похоже на то, что я придумал сам. Jeroen Wiert Pluimers 13 лет назад 0
0
Dexter77

Если вы, как и я, искали ответ «да» в окне certutil.exe через nircmd, выполните команду.

C:\Users\<user>\Desktop>nircmdc.exe dlg "certutil.exe" "" click yes execmd certutil.exe -p xxxxx -user -importpfx cert.p12

Похожие вопросы