Problemi noti e risoluzione dei problemi per SignTool

I tipi di errori più comuni quando si usa SignTool sono interni e in genere hanno un aspetto simile al seguente:

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

Se il codice di errore inizia con 0x8008, ad esempio 0x80080206 (APPX_E_CORRUPT_CONTENT), il pacchetto firmato non è valido. Se viene visualizzato questo tipo di errore, è necessario ricompilare il pacchetto ed eseguire di nuovo SignTool .

SignTool ha un'opzione di debug disponibile per visualizzare gli errori del certificato e il filtro. Per usare la funzionalità di debug, posizionare l'opzione /debug direttamente dopo sign, seguita dal comando SignTool completo.

SignTool sign /debug [options]

Un errore più comune è 0x8007000B. Per questo tipo di errore, è possibile trovare altre informazioni nel registro eventi.

Per altre informazioni nel registro eventi:

  • Eseguire Eventvwr.msc
  • Aprire il registro eventi: Visualizzatore eventi (locale) -> Registri applicazioni e servizi -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Trovare l'evento di errore più recente

L'errore interno 0x8007000B in genere corrisponde a uno di questi valori:

ID evento Stringa di evento di esempio Suggerimento
150 errore 0x8007000B: il nome dell'autore del manifesto dell'app (CN=Contoso) deve corrispondere al nome soggetto del certificato di firma (CN=Contoso, C=US). Il nome dell'autore del manifesto dell'app deve corrispondere esattamente al nome del soggetto della firma.
151 errore 0x8007000B: il metodo hash della firma specificato (SHA512) deve corrispondere al metodo hash usato nella mappa a blocchi del pacchetto dell'app (SHA256). HashAlgorithm specificato nel parametro /fd non è corretto. Eseguire di nuovo SignTool usando hashAlgorithm che corrisponde alla mappa a blocchi del pacchetto dell'app (usata per creare il pacchetto dell'app)
152 errore 0x8007000B: il contenuto del pacchetto dell'app deve essere convalidato rispetto alla mappa a blocchi. Il pacchetto dell'app è danneggiato e deve essere ricompilato per generare una nuova mappa a blocchi. Per altre informazioni sulla creazione di un pacchetto dell'app, vedere Creare un pacchetto dell'app con lo strumento MakeAppx.exe

Un altro errore comune è 0x80080057. Quando si tenta di firmare un file PE (Portable Executable), è possibile che si verifichino i problemi seguenti usando lo strumento SignTool in Windows:

  • Non è possibile firmare un file PE di 4 gigabyte (GB) o superiore. Quando si tenta di firmare, viene visualizzato un messaggio di errore "parametro non valido (0x80080057)".

  • Per i file di dimensioni superiori a 4 GB, l'hash generato potrebbe non essere accurato anche se SignTool potrebbe altrimenti firmare correttamente il file.

    Nota

    Questo è particolarmente vero per i file con estensione cat.

Questo problema si verifica per i file PE, ad esempio .exe, sys e così via. Questo problema si verifica a causa di una variabile ULONG nell'intestazione PE che specifica le dimensioni dell'immagine. Le dimensioni dell'immagine sono di 2 GB per i sistemi operativi di livello inferiore, ad esempio Vista e versioni precedenti. Si tratta di una limitazione di progettazione dal 1996. Il limite massimo per questo valore è 4 GB per i file PE, ad esempio exe e sys. Anche se i file con estensione cat sono in genere firmabili, l'hash interno generato potrebbe non essere accurato.

Per risolvere questo problema, assicurarsi che qualsiasi file PE che si tenta di firmare sia inferiore a 4 GB. A causa dei rischi di compatibilità con le versioni precedenti, non sono attualmente possibili backport né correzioni permanenti. Tuttavia, questo problema viene analizzato.

Nota

Questo problema non è specifico di SignTool. La progettazione dell'intestazione PE è limitata a 4 GB per Windows 7 e versioni successive di Windows, indipendentemente dallo strumento usato.

Domande frequenti

D1: Qual è il limite di dimensioni ufficiali del file corrente per una firma digitale (e firma controfirma timestamp) in Windows?

A1: per i file PE, ad esempio exe e sys, la dimensione massima del file per la firma è di 4 GB.

D2: Esiste una versione specifica di Windows, ad esempio Windows Server 2016, che ha la massima capacità di firmare file di grandi dimensioni?

A2: No, il problema interessa tutte le versioni di Windows.

D3: La versione a 64 bit di Signtool offre un supporto migliore per questa funzionalità rispetto alla versione a 32 bit?

R: No, la versione a 64 bit di SignTool usa gli stessi valori della versione a 32 bit. Pertanto, il problema rimane a 64 bit.

D4: I clienti che usano una versione a 32 bit di Windows potrebbero riscontrare problemi se tentano di usare file firmati usando la versione a 64 bit di SignTool?

R: No. Tuttavia, le limitazioni rimarranno indipendentemente dalla versione di SignTool usata.

D5: Dovremmo usare completamente uno strumento o un metodo di firma diverso?

R: Attualmente non è disponibile alcun metodo alternativo per la firma digitale.