Assinar um pacote do aplicativo usando a SignTool

SignTool é uma ferramenta de linha de comando usada para assinar digitalmente um pacote ou lote de aplicativos com um certificado. O certificado pode ser criado pelo usuário (para fins de teste) ou emitido por uma empresa (para distribuição). Assinar um pacote do aplicativo fornece ao usuário uma verificação de que os dados do aplicativo não foram modificados depois que ele foi assinado enquanto também confirma a identidade do usuário ou empresa que assinou. SignTool pode assinar pacotes e lotes de aplicativos criptografados ou não criptografados.

Importante

Se você usou o Visual Studio para desenvolver seu aplicativo, é recomendável que você use o Assistente do Visual Studio para criar e assinar seu pacote de aplicativo. Para obter mais informações, consulte Package a UWP app with Visual Studio and Package a desktop app from source code using Visual Studio.

Para obter mais informações sobre assinatura de código e certificados em geral, consulte Introdução à Assinatura de Código.

Pré-requisitos

  • Um aplicativo empacotado
    Para saber mais sobre como criar manualmente um pacote de aplicativos, consulte Criar um pacote do aplicativo com a ferramenta MakeAppx.exe.

  • Um certificado de assinatura válido
    Para obter mais informações sobre como criar ou importar um certificado válido de assinatura, consulte Criar ou importar um certificado de assinatura de pacote.

  • SignTool.exe
    Dependendo do seu caminho de instalação do SDK, a SignTool é instalada no computador Windows 10 nos seguintes locais:

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

Usando o SignTool

SignTool pode ser usado para assinar arquivos, verificar assinaturas ou carimbos de data e hora, remover assinaturas e muito mais. Para a finalidade de assinar um pacote de aplicativos, destacaremos o comando sign. Para obter informações completas sobre o SignTool, consulte a página de referência do SignTool.

Determinar o algoritmo de hash

Ao usar o SignTool para assinar seu pacote ou lote de aplicativos, o algoritmo de hash usado em SignTool deve ser o mesmo algoritmo usado para empacotar seu aplicativo. Por exemplo, se você usou o MakeAppx.exe para criar o pacote de aplicativos com as configurações padrão, você deve especificar SHA256 ao usar o SignTool já que é o algoritmo padrão usado pelo MakeAppx.exe.

Para descobrir qual algoritmo de hash foi usado durante o empacotamento de seu aplicativo, extraia o conteúdo do pacote de aplicativos e inspecione o arquivo AppxBlockMap.xml. Para saber como descompactar/extrair um pacote de aplicativos, consulte Extrair arquivos de um pacote ou lote. O método de hash está no elemento BlockMap e tem este formato:

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

Esta tabela mostra cada valor de HashMethod e seu algoritmo de hash correspondente:

Valor de HashMethod Algoritmo de hash
http://www.w3.org/2001/04/xmlenc#sha256 SHA256
http://www.w3.org/2001/04/xmldsig-more#sha384 SHA384
http://www.w3.org/2001/04/xmlenc#sha512 SHA512

Observação

Como o algoritmo padrão do SignTool é SHA1 (não disponível no MakeAppx.exe), você deve sempre especificar um algoritmo de hash ao usar o SignTool.

Assinar o pacote de aplicativos

Depois que você tiver todos os pré-requisitos e determinar qual algoritmo de hash foi usado para empacotar seu aplicativo, você estará pronto para assiná-lo.

A sintaxe de linha de comando geral para a assinatura de pacote do SignTool é:

SignTool sign [options] <filename(s)>

O certificado usado para assinar seu aplicativo deve ser um arquivo .pfx ou ser instalado em um repositório de certificados.

Para assinar o pacote de aplicativos com um certificado de um arquivo .pfx, use a seguinte sintaxe:

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

Observe que a opção /a permite que o SignTool escolha o melhor certificado automaticamente.

Se o certificado não for um arquivo .pfx, use a seguinte sintaxe:

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, você pode especificar o hash SHA1 do certificado desejado, em vez do <Nome do Certificado> usando esta sintaxe:

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

Para obter mais exemplos, consulte Usando SignTool para assinar um arquivo

Observe que alguns certificados não usam uma senha. Se o certificado não tiver uma senha, omita "/p <Sua Senha>" dos comandos de amostra.

Depois que o pacote de aplicativos é assinado com um certificado válido, você está pronto para carregar o pacote para a Loja. Para obter mais orientações sobre como carregar e enviar aplicativos para a Loja, consulte Envios de aplicativos.