Firmar un paquete de la aplicación con SignToolSign an app package using SignTool

SignTool es una herramienta de línea de comandos que se usa para firmar digitalmente un paquete de aplicación o un lote con un certificado.SignTool is a command line tool used to digitally sign an app package or bundle with a certificate. El certificado puede ser creado por el usuario (con fines de prueba) o emitido por una empresa (para su distribución).The certificate can either be created by the user (for testing purposes) or issued by a company (for distribution). Al firmar un paquete de la aplicación, se proporciona al usuario la comprobación de que los datos de la aplicación no se han modificado después de firmarlos, a la vez que confirman la identidad del usuario o la compañía que lo firmó.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 puede firmar paquetes de aplicación cifrados o no cifrados.SignTool can sign encrypted or unencrypted app packages and bundles.

Importante

Si usa Visual Studio para desarrollar la aplicación, se recomienda que use el Asistente de Visual Studio para crear y firmar el paquete de la aplicación.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. Para obtener más información, vea empaquetar una aplicación para UWP con Visual Studio y empaquetar una aplicación de escritorio desde el código fuente mediante Visual Studio.For more information, see Package a UWP app with Visual Studio and Package a desktop app from source code using Visual Studio.

Para obtener más información sobre la firma de código y los certificados en general, vea Introducción a la firma de código.For more information about code signing and certificates in general, see Introduction to Code Signing.

Requisitos previosPrerequisites

  • Una aplicación empaquetadaA packaged app
    Para obtener más información sobre cómo crear manualmente un paquete de la aplicación, consulte crear un paquete de la aplicación con la herramienta MakeAppx.exe.To learn more about manually creating an app package, see Create an app package with the MakeAppx.exe tool.

  • Un certificado de firma válidoA valid signing certificate
    Para obtener más información sobre cómo crear o importar un certificado de firma válido, vea crear o importar un certificado para la firma de paquetes.For more information about creating or importing a valid signing certificate, see Create or import a certificate for package signing.

  • SignTool.exeSignTool.exe
    En función de la ruta de instalación del SDK, es donde se encuentra SignTool en el equipo con Windows 10:Based on your installation path of the SDK, this is where SignTool is on your Windows 10 PC:

    • x86: C:\Archivos de programa (x86) \Windows Kits\10\bin \ < sdk versión >\x86\SignTool.exex86: C:\Program Files (x86)\Windows Kits\10\bin\<sdk version>\x86\SignTool.exe
    • x64: C:\Archivos de programa (x86) \Windows Kits\10\bin \ < sdk versión >\x64\SignTool.exex64: C:\Program Files (x86)\Windows Kits\10\bin\<sdk version>\x64\SignTool.exe

Uso de SignToolUsing SignTool

SignTool se puede usar para firmar archivos, comprobar firmas o marcas de tiempo, quitar firmas y mucho más.SignTool can be used to sign files, verify signatures or timestamps, remove signatures, and more. Con el fin de firmar un paquete de la aplicación, nos centraremos en el comando firmar .For the purpose of signing an app package, we will focus on the sign command. Para obtener información completa sobre SignTool, consulte la página de referencia de SignTool .For full information on SignTool, see the SignTool reference page.

Determinar el algoritmo hashDetermine the hash algorithm

Al usar SignTool para firmar el paquete de la aplicación o el lote, el algoritmo hash que se usa en SignTool debe ser el mismo algoritmo que se usó para empaquetar la aplicación.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. Por ejemplo, si usó MakeAppx.exe para crear el paquete de la aplicación con la configuración predeterminada, debe especificar SHA256 al usar SignTool ya que es el algoritmo predeterminado que usa 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.

Para averiguar qué algoritmo hash se usó al empaquetar la aplicación, extraiga el contenido del paquete de la aplicación e inspeccione el archivo de 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. Para obtener información sobre cómo desempaquetar o extraer un paquete de aplicación, vea extraer archivos de un paquete o agrupación.To learn how to unpack/extract an app package, see Extract files from a package or bundle. El método hash está en el elemento BlockMap y tiene este formato: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">

En esta tabla se muestran los valores de HashMethod y el algoritmo hash correspondiente:This table shows each HashMethod value and its corresponding hash algorithm:

Valor 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

Dado que el algoritmo predeterminado de SignTooles SHA1 (no está disponible en MakeAppx.exe), siempre debe especificar un algoritmo hash al usar SignTool.Since SignTool's default algorithm is SHA1 (not available in MakeAppx.exe), you must always specify a hash algorithm when using SignTool.

Firmar el paquete de la aplicaciónSign the app package

Una vez que tenga todos los requisitos previos y haya determinado qué algoritmo hash se ha usado para empaquetar la aplicación, está listo para firmarla.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 sintaxis de línea de comandos general para la firma de paquetes de SignTool es:The general command line syntax for SignTool package signing is:

SignTool sign [options] <filename(s)>

El certificado usado para firmar la aplicación debe ser un archivo. pfx o debe instalarse en un almacén de certificados.The certificate used to sign your app must be either a .pfx file or be installed in a certificate store.

Para firmar el paquete de la aplicación con un certificado de un archivo. pfx, use la siguiente sintaxis: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

Tenga en cuenta que la /a opción permite a SignTool elegir el mejor certificado automáticamente.Note that the /a option allows SignTool to choose the best certificate automatically.

Si el certificado no es un archivo. pfx, use la siguiente sintaxis: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

Como alternativa, puede especificar el hash SHA1 del certificado deseado en lugar del < nombre del certificado > con esta sintaxis: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

Para obtener más ejemplos, consulte uso de SignTool para firmar un archivoFor more examples, see Using SignTool to Sign a File

Tenga en cuenta que algunos certificados no utilizan una contraseña.Note that some certificates do not use a password. Si el certificado no tiene una contraseña, omita "/p < su contraseña > " en los comandos de ejemplo.If your certificate does not have a password, omit "/p <Your Password>" from the sample commands.

Una vez que el paquete de la aplicación está firmado con un certificado válido, está listo para cargar el paquete en la tienda.Once your app package is signed with a valid certificate, you're ready to upload your package to the Store. Para obtener más información sobre cómo cargar y enviar aplicaciones a la tienda, consulte envíosde aplicaciones.For more guidance on uploading and submitting apps to the Store, see App submissions.