Assinar um pacote do aplicativo usando a SignTool

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

Importante

Se você usou o Visual Studio para desenvolver seu aplicativo, é recomendável usar o assistente do Visual Studio para criar e assinar seu pacote de aplicativo. Para obter mais informações, consulte Empacotar um aplicativo UWP com o Visual Studio e Empacotar um aplicativo da área de trabalho do código-fonte usando o 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 aplicativo, consulte Criar um pacote de aplicativo com a ferramenta MakeAppx.exe.

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

  • SignTool.exe
    Com base no caminho de instalação do SDK, é aqui que o SignTool está no seu PC com Windows 10:

    • x86: C:\Arquivos de Programas (x86)\Windows Kits\10\bin\sdk version>\x86\<SignTool.exe
    • x64: C:\Arquivos de Programas (x86)\Windows Kits\10\bin\sdk version>\x64\<SignTool.exe

Como usar a SignTool

O SignTool pode ser usado para assinar arquivos, verificar assinaturas ou carimbos de data/hora, remover assinaturas e muito mais. Para fins de assinatura de um pacote de aplicativo, vamos nos concentrar no 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 o pacote ou pacote do aplicativo, o algoritmo de hash usado no SignTool deve ser o mesmo algoritmo usado para empacotar seu aplicativo. Por exemplo, se você usou MakeAppx.exe para criar seu pacote de aplicativo com as configurações padrão, você deve especificar SHA256 ao usar SignTool, pois esse é o algoritmo padrão usado pelo MakeAppx.exe.

Para descobrir qual algoritmo de hash foi usado durante o empacotamento do aplicativo, extraia o conteúdo do pacote do aplicativo e inspecione o arquivo AppxBlockMap.xml aplicativo. Para saber como descompactar/extrair um pacote de aplicativo, consulte Extrair arquivos de um pacote ou pacote. O método 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 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ê sempre deve especificar um algoritmo de hash ao usar o SignTool.

Assinar o pacote do aplicativo

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

A sintaxe geral da linha de comando para assinatura de pacote 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 do aplicativo 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 permite que o /a 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 de <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 o 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>" nos comandos de exemplo.

Depois que o pacote do aplicativo for assinado com um certificado válido, você estará pronto para carregá-lo na Loja. Para obter mais orientações sobre como carregar e enviar aplicativos para a Loja, consulte Envios de aplicativos.