Firmare il pacchetto di un'app tramite SignToolSign an app package using SignTool

SignTool è uno strumento da riga di comando usato per firmare digitalmente un pacchetto o un bundle dell'app con un certificato.SignTool is a command line tool used to digitally sign an app package or bundle with a certificate. Il certificato può essere creato dall'utente (a scopo di test) o emesso da una società (per la distribuzione).The certificate can either be created by the user (for testing purposes) or issued by a company (for distribution). La firma di un pacchetto dell'app consente all'utente di verificare che i dati dell'app non siano stati modificati dopo la firma, confermando al tempo stesso l'identità dell'utente o della società che la ha firmata.Signing an app package provides the user with verification that the app's data has not been modified after it was signed while also confirming the identity of the user or company that signed it. SignTool può firmare pacchetti e bundle di app crittografati o non crittografati.SignTool can sign encrypted or unencrypted app packages and bundles.

Importante

Se è stato usato Visual Studio per sviluppare l'app, è consigliabile usare la procedura guidata di Visual Studio per creare e firmare il pacchetto dell'app.If you used Visual Studio to develop your app, it's recommended that you use the Visual Studio wizard to create and sign your app package. Per altre informazioni, vedere creare un pacchetto di un'app UWP con Visual Studio e creare il pacchetto di un'app desktop dal codice sorgente usando Visual Studio.For more information, see Package a UWP app with Visual Studio and Package a desktop app from source code using Visual Studio.

Per ulteriori informazioni sulla firma del codice e sui certificati in generale, vedere Introduzione alla firma del codice.For more information about code signing and certificates in general, see Introduction to Code Signing.

PrerequisitiPrerequisites

  • App in pacchettoA packaged app
    Per altre informazioni sulla creazione manuale di un pacchetto dell'app, vedere creare un pacchetto dell'app con lo strumento MakeAppx.exe.To learn more about manually creating an app package, see Create an app package with the MakeAppx.exe tool.

  • Un certificato di firma validoA valid signing certificate
    Per ulteriori informazioni sulla creazione o l'importazione di un certificato di firma valido, vedere creare o importare un certificato per la firma del pacchetto.For more information about creating or importing a valid signing certificate, see Create or import a certificate for package signing.

  • SignTool.exeSignTool.exe
    In base al percorso di installazione dell'SDK, questo è il punto in cui SignTool si trova nel PC Windows 10:Based on your installation path of the SDK, this is where SignTool is on your Windows 10 PC:

    • x86: C:\Programmi (x86) \Windows Kits\10\bin \ < sdk Version >\x86\SignTool.exex86: C:\Program Files (x86)\Windows Kits\10\bin\<sdk version>\x86\SignTool.exe
    • x64: C:\Programmi (x86) \Windows Kits\10\bin \ < sdk Version >\x64\SignTool.exex64: C:\Program Files (x86)\Windows Kits\10\bin\<sdk version>\x64\SignTool.exe

Uso di SignToolUsing SignTool

È possibile usare SignTool per firmare i file, verificare le firme o i timestamp, rimuovere le firme e altro ancora.SignTool can be used to sign files, verify signatures or timestamps, remove signatures, and more. Ai fini della firma di un pacchetto dell'app, si concentrerà sul comando Sign .For the purpose of signing an app package, we will focus on the sign command. Per informazioni complete su SignTool, vedere la pagina di riferimento di SignTool .For full information on SignTool, see the SignTool reference page.

Determinare l'algoritmo hashDetermine the hash algorithm

Quando si usa SignTool per firmare il pacchetto o il bundle dell'app, l'algoritmo hash usato in SignTool deve essere lo stesso algoritmo usato per creare il pacchetto dell'app.When using SignTool to sign your app package or bundle, the hash algorithm used in SignTool must be the same algorithm you used to package your app. Se, ad esempio, è stato usato MakeAppx.exe per creare il pacchetto dell'app con le impostazioni predefinite, è necessario specificare SHA256 quando si usa SignTool , perché questo è l'algoritmo predefinito usato da MakeAppx.exe.For example, if you used MakeAppx.exe to create your app package with the default settings, you must specify SHA256 when using SignTool since that's the default algorithm used by MakeAppx.exe.

Per individuare l'algoritmo hash usato durante la creazione del pacchetto dell'app, estrarre il contenuto del pacchetto dell'app e ispezionare il file di AppxBlockMap.xml.To find out which hash algorithm was used while packaging your app, extract the contents of the app package and inspect the AppxBlockMap.xml file. Per informazioni su come decomprimere/estrarre un pacchetto dell'app, vedere estrarre file da un pacchetto o un bundle.To learn how to unpack/extract an app package, see Extract files from a package or bundle. Il metodo hash si trova nell'elemento BlockMap e ha il formato seguente:The hash method is in the BlockMap element and has this format:

<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap"
HashMethod="http://www.w3.org/2001/04/xmlenc#sha256">

Questa tabella mostra ogni valore HashMethod e l'algoritmo hash corrispondente:This table shows each HashMethod value and its corresponding hash algorithm:

Valore HashMethodHashMethod value Algoritmo hashHash Algorithm
http://www.w3.org/2001/04/xmlenc#sha256 SHA256SHA256
http://www.w3.org/2001/04/xmldsig-more#sha384 SHA384SHA384
http://www.w3.org/2001/04/xmlenc#sha512 SHA512SHA512

Nota

Poiché l'algoritmo predefinito di SignToolè SHA1 (non disponibile in MakeAppx.exe), è sempre necessario specificare un algoritmo hash quando si usa SignTool.Since SignTool's default algorithm is SHA1 (not available in MakeAppx.exe), you must always specify a hash algorithm when using SignTool.

Firma del pacchetto dell'appSign the app package

Quando si hanno tutti i prerequisiti e si è determinato quale algoritmo hash è stato usato per creare il pacchetto dell'app, si è pronti per la firma.Once you have all of the prerequisites and you've determined which hash algorithm was used to package your app, you're ready to sign it.

La sintassi della riga di comando generale per la firma del pacchetto SignTool è la seguente:The general command line syntax for SignTool package signing is:

SignTool sign [options] <filename(s)>

Il certificato usato per firmare l'app deve essere un file con estensione pfx o essere installato in un archivio certificati.The certificate used to sign your app must be either a .pfx file or be installed in a certificate store.

Per firmare il pacchetto dell'app con un certificato da un file con estensione pfx, usare la sintassi seguente:To sign your app package with a certificate from a .pfx file, use the following syntax:

SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.appx
SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.msix

Si noti che l' /a opzione consente a SignTool di scegliere automaticamente il certificato migliore.Note that the /a option allows SignTool to choose the best certificate automatically.

Se il certificato non è un file con estensione pfx, usare la sintassi seguente:If your certificate is not a .pfx file, use the following syntax:

SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.msix

In alternativa, è possibile specificare l'hash SHA1 del certificato desiderato anziché il < nome del certificato > utilizzando questa sintassi:Alternatively, you can specify the SHA1 hash of the desired certificate instead of <Name of Certificate> using this syntax:

SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.msix

Per altri esempi, vedere uso di SignTool per firmare un fileFor more examples, see Using SignTool to Sign a File

Si noti che alcuni certificati non usano una password.Note that some certificates do not use a password. Se il certificato non dispone di una password, omettere "/p < your password > " dai comandi di esempio.If your certificate does not have a password, omit "/p <Your Password>" from the sample commands.

Quando il pacchetto dell'app è firmato con un certificato valido, si è pronti per caricare il pacchetto nell'archivio.Once your app package is signed with a valid certificate, you're ready to upload your package to the Store. Per altre informazioni sul caricamento e l'invio di app allo Store, vedere invii di app.For more guidance on uploading and submitting apps to the Store, see App submissions.