Problemi noti e risoluzione dei problemi relativi a SignTool

I tipi più comuni di errori quando si usa SignTool sono interni e in genere sono simili 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 offre 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) - Log 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 error 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 dell'oggetto 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 del blocco 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 di app, vedere Creare un pacchetto di app con lo strumento di MakeAppx.exe

Un altro errore comune è 0x80080057. È possibile che si verifichino i problemi seguenti quando si tenta di firmare un file eseguibile portabile (PE) usando lo strumento SignTool in Windows:

  • Non è possibile firmare un file PE pari a 4 gigabyte (GB) o maggiore. 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 dei 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 2 GB per i sistemi operativi a livello inferiore, ad esempio Vista e versioni precedenti. Si tratta di una limitazione della 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 minore di 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 correnti del file ufficiale per una firma digitale (e una controfirma del 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 maggior 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 supporta meglio 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 i file firmati usando la versione a 64 bit di SignTool?

R: No. Tuttavia, le limitazioni rimangono indipendentemente dalla versione di SignTool utilizzata.

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

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