Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
Para assinar um pacote de aplicativo do Windows, consulte Assinar um pacote de aplicativo usando o SignTool.
Saiba como usar SignTool para assinar seus pacotes de aplicativos do Windows para que eles possam ser implantados. SignTool faz parte do Windows Software Development Kit (SDK).
Todos os pacotes de aplicativos do Windows devem ser assinados digitalmente antes de poderem ser implantados. Embora o Microsoft Visual Studio 2012 e posteriores possam assinar um pacote de aplicações durante a sua criação, os pacotes criados usando a ferramenta empacotadora de aplicativos (MakeAppx.exe) do Windows SDK não são assinados.
Observação
Você só pode usar SignTool para assinar seus pacotes de aplicativos do Windows no Windows 8 e posterior ou no Windows Server 2012 e posterior. Não é possível usar SignTool para assinar pacotes de aplicativos em sistemas operacionais de nível inferior, como o Windows 7 ou o Windows Server 2008 R2.
O que precisa de saber
Tecnologias
- Introdução à assinatura de código
- Pacotes de aplicativos e de implantação
- Ferramentas para assinar ficheiros e verificar assinaturas
Pré-requisitos
SignTool, que faz parte do SDK do Windows
Um certificado de assinatura de código válido, por exemplo, um arquivo de troca de informações pessoais (.pfx) criado com as ferramentas MakeCert.exe e Pvk2Pfx.exe
Para obter informações sobre como criar um certificado de assinatura de código válido, consulte Como criar um certificado de assinatura de pacote de aplicativo.
Uma aplicação empacotada para Windows, por exemplo, um ficheiro .appx criado usando a ferramenta empacotador de aplicações (MakeAppx.exe)
Considerações adicionais
O certificado que você usa para assinar o pacote do aplicativo deve atender a estes critérios:
O nome do assunto do certificado deve corresponder ao atributo Publisher contido no elemento Identity do arquivo de AppxManifest.xml armazenado no pacote. O nome do editor faz parte da identidade de um aplicativo do Windows empacotado, portanto, você precisa fazer com que o nome do assunto do certificado corresponda ao nome do editor do aplicativo. Isso permite que a identidade dos pacotes assinados seja verificada em relação à assinatura digital. Para obter informações sobre erros de assinatura que podem surgir da assinatura de um pacote de aplicativo usando SignTool, consulte a seção Comentários de Como criar um certificado de assinatura de pacote de aplicativo.
O certificado deve ser válido para assinatura de código. Isso significa que ambos os itens devem ser verdadeiros:
- O campo Uso Estendido de Chave (EKU) do certificado deve ser desdefinido ou conter o valor EKU para assinatura de código (1.3.6.1.5.5.7.3.3).
- O campo Uso de Chave (KU) do certificado deve ser desdefinido ou conter o bit de uso para assinatura digital (0x80).
O certificado contém uma chave privada.
O certificado é válido. Está ativo, não expirou e não foi revogado.
Instruções
Etapa 1: Determinar o algoritmo de hash a ser usado
Ao assinar o pacote do aplicativo, você deve usar o mesmo algoritmo de hash usado quando criou o pacote do aplicativo. Se você usou as configurações padrão para criar o pacote do aplicativo, o algoritmo de hash usado é SHA256.
Se você usou o empacotador de aplicativos com um algoritmo de hash específico para criar o pacote do aplicativo, use o mesmo algoritmo para assinar o pacote. Para determinar o algoritmo de hash a ser usado para assinar um pacote, você pode extrair o conteúdo do pacote e inspecionar o arquivo AppxBlockMap.xml. O atributo HashMethod do elementoBlockMap indica o algoritmo de hash que foi usado ao criar o pacote do aplicativo. Por exemplo:
<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap"
HashMethod="https://www.w3.org/2001/04/xmlenc#sha256">
O anterior BlockMap elemento indica que o algoritmo SHA256 foi usado. Esta tabela lista o mapeamento dos algoritmos atualmente disponíveis:
| HashMethod valor | hashAlgorithm a usar |
|---|---|
| https://www.w3.org/2001/04/xmlenc#sha256 | SHA256 (.appx padrão) |
| https://www.w3.org/2001/04/xmldsig-more#sha384 | SHA384 |
| https://www.w3.org/2001/04/xmlenc#sha512 | SHA512 |
Etapa 2: Execute SignTool.exe para assinar o pacote
Para efetuar a assinatura do pacote com um certificado de assinatura a partir de um ficheiro .pfx
-
SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password filepath.appx
SignTool assume como padrão o parâmetro /fd hashAlgorithm SHA1 se não for especificado e SHA1 não for válido para assinar pacotes de aplicativos. Portanto, você deve especificar esse parâmetro ao assinar um pacote de aplicativo. Para assinar um pacote de aplicativo que foi criado com o hash SHA256 padrão, especifique o parâmetro /fd hashAlgorithm como SHA256:
SignTool sign /fd SHA256 /a /f signingCert.pfx /p password filepath.appx
Você pode omitir o parâmetro /p senha se usar um arquivo .pfx que não esteja protegido por senha. Você também pode usar outras opções de seleção de certificado suportadas pelo SignTool para assinar pacotes de aplicativos. Para obter mais informações sobre essas opções, consulte SignTool.
Observação
Você não pode usar a operação de marca temporal SignTool num pacote de aplicação assinado; a operação não é suportada.
Se quiser colocar um carimbo de data/hora no pacote da aplicação, deverá fazê-lo durante a operação de assinatura. Por exemplo:
SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password /tr timestampServerUrl
filepath.appx
Torne o parâmetro /tr timestampServerUrl igual à URL de um servidor de carimbo de data/hora RFC 3161.
Comentários
Esta seção discute a solução de problemas de erros de assinatura para pacotes de aplicativos.
Solução de problemas de erros de assinatura do pacote do aplicativo
Além dos erros de assinatura que SignTool pode retornar, SignTool também pode retornar erros específicos para a assinatura de pacotes de aplicativos. Esses erros geralmente aparecem como erros internos:
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B)
Se o código de erro começar com 0x8008, como 0x80080206 APPX_E_CORRUPT_CONTENT), indica que o pacote que está sendo assinado é inválido. Antes de poderes assinar o pacote, deves reconstruí-lo. Para obter a lista completa de erros 0x8008*, consulte Códigos de erro COM (segurança e configuração).
Mais comumente, o erro é 0x8007000b (ERROR_BAD_FORMAT). Nesse caso, você pode encontrar informações de erro mais específicas no log de eventos:
Para pesquisar o log de eventos
- Execute Eventvwr.msc.
- Abra o log de eventos: Visualizador de Eventos (Local) > Logs de Aplicativos e Serviços > Microsoft > Windows > AppxPackagingOM > Microsoft-Windows-AppxPackaging/Operational
- Procure o evento de erro mais recente.
O erro interno geralmente corresponde a um destes:
| ID do Evento | Exemplo de cadeia de caracteres de evento | Sugestão |
|---|---|---|
| 150 | Erro 0x8007000B: O nome do editor do manifesto da app (CN=Contoso) deve corresponder ao nome do sujeito do certificado de assinatura (CN=Contoso, C=US). | O nome do editor do manifesto da aplicação deve corresponder exatamente ao nome do sujeito da assinatura.
Nota: Esses nomes são especificados entre aspas e são sensíveis a maiúsculas/minúsculas e a espaços. Você pode atualizar a cadeia de caracteres de atributo Publisher, que está definida para o elemento Identity no arquivo AppxManifest.xml, para corresponder ao nome do sujeito do certificado de assinatura pretendido. Ou então, selecione um certificado de autenticação diferente com um nome do sujeito que corresponda ao nome do editor do manifesto da aplicação. O nome do editor do manifesto e o nome do assunto do certificado são listados na mensagem do evento. |
| 151 | erro 0x8007000B: O método de hash de assinatura especificado (SHA512) deve corresponder ao método de hash usado no mapa de blocos do pacote do aplicativo (SHA256). | O hashAlgorithm especificado no parâmetro /fd está incorreto (consulte Etapa 1: Determinar o algoritmo de hash a ser usado). Execute novamente o SignTool com o algoritmo de hash que corresponde ao mapa de blocos do pacote da aplicação. |
| 152 | erro 0x8007000B: O conteúdo do pacote do aplicativo deve ser validado em relação ao seu mapa de bloqueio. | O pacote do aplicativo está corrompido e precisa ser reconstruído para gerar um novo mapa de blocos. Para saber mais sobre como criar um pacote de aplicativo, veja Criando um pacote de aplicativo com do empacotador de aplicativos ou Criando um pacote de aplicativo com o Visual Studio 2012. |
Considerações de segurança
Depois que o pacote for assinado, o certificado usado para assinar o pacote ainda deverá ser confiável pelo computador no qual o pacote será implantado. Ao adicionar um certificado a armazenamento de certificados de máquina local, você afeta a confiança do certificado de todos os usuários no computador. Recomendamos que você instale todos os certificados de assinatura de código desejados para testar pacotes de aplicativos no repositório de certificados de Pessoas Confiáveis e remova imediatamente esses certificados quando não forem mais necessários. Se você criar seus próprios certificados de teste para assinar pacotes de aplicativos, também recomendamos que restrinja os privilégios associados ao certificado de teste. Para saber mais sobre como criar certificados de teste para assinar pacotes de aplicativos, veja Como criar um certificado de assinatura de pacote de aplicativo.