Root-Zertifikat installieren / löschen, ohne dass CertMgr / CertUt den Endbenutzer zur Bestätigung auffordert

14486
Jeroen Wiert Pluimers

Wenn Sie ein Stammzertifizierungsstellenzertifikat mit den Befehlszeilentools CertUtil.exe oder CertMgr.exe installieren oder löschen, fordert Windows den Benutzer zur Bestätigung mit einer MessageBox auf (für andere Zertifikate als die Stammzertifizierungsstelle wird diese Frage nicht gestellt, auch für den Stamm) CA-Zertifikatsspeicher für den aktuellen Benutzer.

Für unbeaufsichtigte Zertifikatsaktualisierungen ist dies ein Aufwand.

Ich habe dieses Verhalten unter Windows XP, Vista und 7 gesehen (Ich habe Windows Server 2003 und 2008 noch nicht überprüft, aber ich gehe davon aus, dass sie auch diese Frage stellen).

Ich habe zwei Fragen:

  1. Warum stellt Windows diese Frage, auch wenn Sie es von einem Befehlszeilenprogramm aus installieren oder löschen?
  2. Wie kann ich das unterdrücken (abgesehen von der Anzeige der Dialogfelder und dem Senden von Windows-Meldungen zum Drücken der Schaltfläche "Ja")?

Die MessageBox-Bestätigungsdialogfelder sehen folgendermaßen aus:

[Root Certificate Store] Do you want to DELETE the following certificate from the Root Store? ... [&Yes] [&No] 

und das:

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

- jeroen

2

2 Antworten auf die Frage

5
harrymc

Die einfachste Lösung besteht darin, die Antwort wie folgt in das Skript aufzunehmen:

echo Y | CertUtil.exe .... 

Diese Methode funktioniert nicht immer für alle Programme, daher müssen Sie noch einige Tests auf Ihrer Seite durchführen.

Für Meldungsfelder können Sie nircmd mit dem dlgParameter verwenden.
In einem Skript können Sie auch den integrierten Befehl verwenden timeout /t seconds, um dem Meldungsfeld die angegebene Anzahl von Sekunden anzugeben, in der angezeigt werden soll.

Hier ist ein Auszug der Hilfedatei:

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

Ermöglicht die Interaktion mit Standarddialogfeldern und Meldungsfeldern von Windows. Wenn ein Dialogfeld geöffnet wird, können Sie diesen Befehl verwenden, um auf die Schaltflächen OK / Abbrechen / Ja / Nein zu klicken oder die Textfelder im Dialogfeld zu füllen.

Mit dem folgenden Befehl wird die Antwort 'Ja' für ein Dialogfeld mit Fragen zum Explorer ausgewählt:
dlg "explorer.exe" "" click yes

Der folgende Befehl wählt die 'Abbrechen'-Antwort für jedes Fragendialogfeld eines Prozesses:
dlg "" "" click cancel

Parameterbeschreibung:

[Prozessname]: Gibt den Prozess an, mit dem das gewünschte Fenster erstellt wurde. Sie können nur den Prozessnamen oder den vollständigen Pfad des Prozesses angeben. Wenn dieser Parameter eine leere Zeichenfolge ("") ist, wird der Befehl für einen beliebigen Prozess ausgeführt.

[Fenstertitel]: Gibt den Titel des Fensters an, in dem die Aktion ausgeführt werden soll. Wenn dieser Parameter eine leere Zeichenfolge ("") ist, wird der Befehl unabhängig vom Fenstertitel in einem beliebigen Fenster ausgeführt.

[Aktion]: Sie können eine der folgenden Optionen angeben:
Klicken Sie auf : Klicken Sie auf die angegebene Schaltfläche. Sie können einen der folgenden vordefinierten Werte angeben (nur für Standard-Windows-Dialogfelder!): Ja, Nein, OK, Abbrechen, Wiederholen, Ignorieren, Schließen, Hilfe. Sie können auch eine Steuerelement-ID als numerischen Wert angeben.
settext: Legt den Text des angegebenen Steuerelements fest. Der erste Parameter dieser Aktion gibt die ID des Steuerelements an, und der zweite Parameter gibt den Text an.

Dies funktioniert nicht bei den Messageboxen, die Windows verwendet, um eine Bestätigung anzufordern. (Ich habe meine Frage bearbeitet, um die Verwendung von MessageBoxes durch Windows klarer zu machen). Jeroen Wiert Pluimers vor 13 Jahren 0
@Jeroen Pluimers: OK - hinzugefügt. harrymc vor 13 Jahren 1
Vielen Dank! Es ist dem ähnlich, was ich selbst gefunden habe. Jeroen Wiert Pluimers vor 13 Jahren 0
0
Dexter77

Für jemanden, der wie ich nach "Ja" auf das certutil.exe-Fenster über nircmd gesucht hat, folgen Sie dem Befehl.

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