Skip to content
Go back

SignTool Error: An error occurred while attempting to load the signing certificate

Published:  at  01:02 PM

Table of contents

Open Table of contents

Das Problem

Das signtool.exe ist ein Programm um andere ausführbare Dateien digital zu signieren. Um eine Datei zu signieren, ist es notwendig ein entsprechendes Zertifikat (Code Signing Zertifikat) zu haben.
Beispielhaft möchten wir das PowerShell Skript test.ps1 signieren.

Von einem Tag auf den andere konnte ich aber auf einer Maschine nicht mehr signieren, folgender Fehler:

C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64>signtool.exe sign /s my /fd SHA256 /ph /td SHA256 /tr http://timestamp.digicert.com C:\Temp\signing\test.ps1
Done Adding Additional Store
SignTool Error: An error occurred while attempting to load the signing
        certificate from: C:\Temp\signing\test.ps1

Was diese Parameter genau machen, findet sich hier: signtool.exe Parameter

Troubleshooting

Das signtool.exe ist nicht gerade bekannt für ausführliche Fehlermeldungen oder Erklärungen. Es gibt für signtool.exe /sign den /debug Parameter. Das kann in manchen Szenarien hilfreich sein, wenn man wissen will welches Zertifikat ausgewählt wird. Aber im Endeffekt resultiert das für uns in der gleichen Fehlermeldung.

Meines Wissens gibt es kein zusätzliches “debug error logfile” oder ähnliches. Sehen wir uns den Fehler an: SignTool Error: An error occurred while attempting to load the signing certificate from: C:\Temp\signing\test.ps1 Die Fehlermeldung ist durchaus irritierend, weil die Fehlermeldung sagt es würde gern das Signing Zertifikat von der Datei (die wir eigentlich signieren möchten) laden. Das macht für mich nicht viel Sinn.

Es gibt durchaus einige Diskussionen über den Fehler:

Aber all das führte zu keiner Lösung meines Problems.

Aktueller Status

Was wissen wir über die aktuelle Situation:

Der einzige manuelle Prozess in meinem Szenario ist das Importieren des Code Signing Zertifikats in den Zertifikatsstore.

Importieren des Zertifikats

Wir wissen aufgrund der /debug Ausgabe, dass das Code Signing Zertifikat grundsätzlich gefunden und auch ausgewählt wird. Sehen wir uns an, welche Optionen es gibt:

certificate import wizard - private key protection

Include all extended properties ist bereits ausgewählt vom Wizard. Das ist der einzige Schritt wo wir Änderungen vornehmen können, der Rest des Wizard gibt keinen Spielraum für Abweichungen.

Wenn wir den Wizard nun fertig durch klicken mit den oben gesetzten Einstellungen, funktioniert das signieren wieder.

Hier eine Übersicht welche Varianten ich probiert habe (es sind einfach die Option der Reihenfolge wie im Screenshot):

----------------------
[ ]
[ ]
[ ]
[x]
----------------------
[x]
[x]
[ ]
[x]
----------------------
[x]
[x]
[ ]
[ ]
----------------------
[ ]
[ ]
[x]
[x]
----------------------
[x]
[ ]
[ ]
[x]
----------------------
[ ] 
[ ]
[x]
[ ]
----------------------
[ ] 
[ ]
[x]
[x]
----------------------
[x] 
[ ]
[ ]
[ ]
----------------------
[x] -----> ERROR CASE 
[ ]
[x]
[x]
----------------------
[x] -----> ERROR CASE 
[ ]
[x]
[ ]
----------------------

Sobald wir nur die oberste Option auswählen, erhalten wir: certificate import wizard - protected item Wenn wir nur die dritte Option auswählen, erhalten wir keinen zusätzlichen Prompt.

Wählen wir die erste und dritte Option aus, erhalten wir folgenden Dialog: certificate import wizard - protected item

Sobald ein Passwort vergeben wird, können wir kein signing mehr machen. Sobald wir also die Option Require a password with this key deselektieren, funktioniert auch diese Variante.

Let’s call it a day

Bedeutet das, dass das generell nicht funktioniert? Definitiv nicht. Auf anderen Maschinen kann ich diese Option nutzen (und ursprünglich auch auf der “Problem-Maschine”) und bekomme auch tatsächlich jedes mal eine Abfrage beim signieren. Ich habe versucht näheres herauszufinden, konnte aber auf die schnelle nicht erkennen was das Problem ist. Sowohl das signtool.exe als auch das äquivalente PowerShell Set-AuthenticodeSignature liefern keine guten Fehlermeldungen.

Mittels procdump.exe kann man sehr einfach Exception ausgeben lassen die von einem Programm erzeugt werden, wenn wir das also mit dem signtool.exe machen mit folgenden CLI:

C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64>C:\Temp\SysinternalsSuite\procdump.exe -e 1 -f "" -w signtool.exe

ProcDump v11.0 - Sysinternals process dump utility
Copyright (C) 2009-2022 Mark Russinovich and Andrew Richards
Sysinternals - www.sysinternals.com

Waiting for process named signtool.exe...

Process:               signtool.exe (8828)
Process image:         C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
CPU threshold:         n/a
Performance counter:   n/a
Commit threshold:      n/a
Threshold seconds:     n/a
Hung window check:     Disabled
Log debug strings:     Disabled
Exception monitor:     First Chance+Unhandled
Exception filter:      [Includes]
                       *
                       [Excludes]
                       *
Terminate monitor:     Disabled
Cloning type:          Disabled
Concurrent limit:      n/a
Avoid outage:          n/a
Number of dumps:       1
Dump folder:           C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\
Dump filename/mask:    PROCESSNAME_YYMMDD_HHMMSS
Queue to WER:          Disabled
Kill after dump:       Disabled


Press Ctrl-C to end monitoring without terminating the process.

[16:16:10] Exception: E06D7363.?AVcapilib_error@@
[16:16:10] Exception: E06D7363.msc
[16:16:10] Exception: E06D7363.msc
[16:16:10] Exception: E06D7363.?AVcapilib_error@@
[16:16:10] Process Exit: PID 8828, Exit Code 0x00000001
[16:16:10] The process has exited.
[16:16:10] Dump count not reached.

Wenn das signtool.exe funktioniert, sieht das Ende so aus:

[16:21:57] Process Exit: PID 11800, Exit Code 0x00000000
[16:21:57] The process has exited.
[16:21:57] Dump count not reached.

Der Exception Code E06D7363 ist eine Art “generische Fehlermeldung” siehe den Blogbeitrag von Raymond Chen.

Wir haben einen Workaround gefunden - die Root Cause des Problems ist noch ungeklärt und eventuell etwas für ein anderes mal…

Happy Troubleshooting.



Previous Post
An authentication error has occured - Microsoft Dev Box
Next Post
Symbols