在没有 CertMgr / CertUtil 要求最终用户确认的情况下安装/删除根证书

Jer*_*ers 2 certificate certutil

当您使用命令行工具CertUtil.exeCertMgr.exe安装或删除根 CA 证书时,Windows 会要求用户使用 MessageBox 进行确认(对于根 CA 以外的证书,不会询问此问题),即使对于根当前用户的 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]
Run Code Online (Sandbox Code Playgroud)

和这个:

[Security Warning]
You are about to install a certificate from a certification authority (CA) claiming to represent:
...
[&Yes]  [&No]
Run Code Online (Sandbox Code Playgroud)

--杰罗恩

har*_*ymc 5

最简单的解决方案是将答案合并到脚本中,如下所示:

echo Y | CertUtil.exe ....
Run Code Online (Sandbox Code Playgroud)

此方法并不总是适用于所有程序,因此您仍然需要对其进行一些测试。

对于消息框,您可以将nircmddlg参数一起使用。
在脚本中,您还可以使用内置命令timeout /t seconds为消息框指定显示的秒数。

以下是帮助文件的摘录:

nircmd.exe dlg [Process Name] [Window Title] [Action] [Parameters]

允许您与 Windows 的标准对话框和消息框进行交互。当对话框打开时,您可以使用此命令“单击”确定/取消/是/否按钮,或填充对话框中的文本框。

以下命令将为 Explorer 进程的任何问题对话框选择“是”答案:
dlg "explorer.exe" "" click yes

以下命令将为任何进程的任何问题对话框选择“取消”答案:
dlg "" "" click cancel

参数说明:

[进程名称]:指定创建所需窗口的进程。您只能指定进程名称或进程的完整路径。如果此参数为空字符串("" ),则该命令将在任何进程上执行。

[窗口标题]:指定要执行操作的窗口的标题。如果此参数为空字符串("" ),则无论窗口标题如何,该命令都将在任何窗口上执行。

[操作]:您可以指定以下选项之一:
单击:单击指定的按钮。您可以指定以下预定义值之一(仅适用于标准 Windows 对话框!):yes、no、ok、cancel、retry、ignore、close、help。您还可以将任何控件 ID 指定为数值。
settext:设置指定控件的文本。此操作的第一个参数指定控件的 ID,第二个参数指定文本。