Kända problem och felsökning för SignTool

De vanligaste typerna av fel när du använder SignTool är interna och ser vanligtvis ut ungefär så här:

SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B) 

Om felkoden börjar med 0x8008, till exempel 0x80080206 (APPX_E_CORRUPT_CONTENT), är det paket som signeras ogiltigt. Om du får den här typen av fel måste du återskapa paketet och köra SignTool igen.

SignTool har ett felsökningsalternativ tillgängligt för att visa certifikatfel och filtrering. Om du vill använda felsökningsfunktionen placerar /debug du alternativet direkt efter sign, följt av det fullständiga SignTool-kommandot .

SignTool sign /debug [options]

Ett vanligare fel är 0x8007000B. För den här typen av fel hittar du mer information i händelseloggen.

Så här hittar du mer information i händelseloggen:

  • Kör kommandot Eventvwr.msc
  • Öppna händelseloggen: Zobrazovač udalostí (Lokal) -> Program- och tjänsteloggar -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Hitta den senaste felhändelsen

Det interna felet 0x8007000B motsvarar vanligtvis något av följande värden:

Händelse-ID Exempel på händelsesträng Förslag
150 fel 0x8007000B: Utgivarnamnet för appmanifestet (CN=Contoso) måste matcha ämnesnamnet för signeringscertifikatet (CN=Contoso, C=US). Utgivarens namn för appmanifestet måste exakt matcha signeringens ämnesnamn.
151 fel 0x8007000B: Den angivna signaturhashmetoden (SHA512) måste matcha hash-metoden som används i programpaketblockkartan (SHA256). HashAlgorithm som anges i parametern /fd är felaktig. Kör SignTool igen med hashAlgorithm som matchar blockkartan för apppaket (används för att skapa apppaketet)
152 fel 0x8007000B: Innehållet i apppaketet måste verifieras mot dess blockkarta. Apppaketet är skadat och måste återskapas för att generera en ny blockkarta. Mer information om hur du skapar ett apppaket finns i Skapa ett apppaket med verktyget MakeAppx.exe

Ett annat vanligt fel är 0x80080057. Du kan få följande problem när du försöker signera en PE-fil (Portable Executable) med hjälp av verktyget SignTool på Windows:

  • Det gick inte att signera en PE-fil som är 4 GB eller större. När du försöker signera får du felmeddelandet "ogiltig parameter (0x80080057)".

  • För filer som är större än 4 GB kanske den genererade hashen inte är korrekt även om SignTool annars kan signera filen.

    Anmärkning

    Detta gäller särskilt för .cat-filer.

Det här problemet uppstår för PE-filer som .exe, .sysoch så vidare. Det här problemet uppstår på grund av en ULONG-variabel i PE-huvudet som anger bildstorleken. (Avbildningsstorleken är 2 GB för operativsystem på nednivå, till exempel Vista och tidigare versioner.) Detta är en designbegränsning sedan 1996. Den maximala gränsen för det här värdet är 4 GB för PE-filer, till exempel .exe och .sys. Även om .cat-filer vanligtvis är signerbara är den interna hash som genereras kanske inte korrekt.

Du kan undvika det här problemet genom att se till att alla PE-filer som du försöker signera är mindre än 4 GB. Detta är en känd designbegränsning för PE-formatet utan planerad korrigering på grund av bakåtkompatibilitetsbegränsningar.

Anmärkning

Det här problemet är inte specifikt för SignTool. Pe-huvudets design är begränsad till 4 GB för Windows 7 och senare Windows versioner, oavsett vilket verktyg som används.

Vanliga frågor (FAQ)

F1: Vad är den aktuella officiella filstorleksgränsen för en digital signatur (och tidsstämpelns motsignatur) på Windows?

A1: För PE-filer som .exe och .sysär den maximala filstorleken för signering 4 GB.

F2: Finns det en viss version av Windows, till exempel Windows Server 2016, som har mest möjlighet att signera stora filer?

S2: Nej, problemet påverkar alla versioner av Windows.

F3: Har 64-bitarsversionen av Signtool bättre stöd för den här funktionen än 32-bitarsversionen?

S: Nej, 64-bitarsversionen av SignTool använder samma värden som 32-bitarsversionen. Därför kvarstår problemet i 64-bitars.

F4: Skulle kunder som använder en 32-bitarsversion av Windows potentiellt uppleva problem om de försöker använda filer som har signerats med hjälp av 64-bitarsversionen av SignTool?

S: Nej. Begränsningarna kvarstår dock oavsett vilken version av SignTool som används.

F5: Ska vi använda ett annat signeringsverktyg eller en annan metod helt och hållet?

S: Ja. Betrodd Azure-signering är Microsoft hanterade kodsigneringstjänst och är det rekommenderade moderna alternativet för att hantera egna certifikat. Den hanterar livscykelhantering för certifikat och integreras med CI/CD-pipelines. Azure Key Vault är ett annat alternativ för signering med molnlagrade certifikat. För offline- eller självbetjäningsscenarier är SignTool fortfarande standardverktyget.