Problemi noti e risoluzione dei problemi per SignTool

I tipi più comuni di errori 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 da firmare 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 /debug l'opzione 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 trovare altre informazioni nel registro eventi:

  • Eseguire Eventvwr.msc
  • Aprire il registro eventi: Visualizzatore eventi (locale) -> Applications and Services Logs -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Trovare l'evento di errore più recente

L'errore 0x8007000B corrisponde in genere 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 soggetto della firma.
151 error 0x8007000B: il metodo hash della firma specificato (SHA512) deve corrispondere al metodo hash usato nella mappa a blocchi del pacchetto dell'app (SHA256). L'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 blocchi. Per altre informazioni sulla creazione di un pacchetto dell'app, vedere Creare un pacchetto dell'app con lo strumento MakeAppx.exe app

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 Windows:

  • Errore durante la firma di 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 maggiori di 4 GB, l'hash generato potrebbe non essere accurato anche se SignTool potrebbe firmare correttamente il file.

    Nota

    Questo vale in particolare 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 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 è in fase di analisi.

Nota

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

Domande frequenti

D1: Qual è il limite di dimensioni del file ufficiale corrente per una firma digitale (e la controfirizzazione del timestamp) Windows?

A1: Per i file PE, ad esempio .exe e .sys, le dimensioni massime del file per la firma sono di 4 GB.

D2: Esiste una particolare versione di Windows, ad esempio Windows Server 2016, che ha la maggiore 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 ha un supporto migliore per questa funzionalità rispetto alla versione a 32 bit?

A: No, la versione a 64 bit di SignTool usa gli stessi valori della versione a 32 bit. Il problema rimane quindi a 64 bit.

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

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

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

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