Assinar seu pacote MSIX: guia de ponta a ponta

Este guia orienta você pela assinatura de um pacote MSIX para cada estágio de desenvolvimento, desde testes locais até distribuição de produção. Para comparar opções e custos de assinatura, consulte Visão geral da assinatura de um pacote MSIX.

Escolher uma abordagem de assinatura

Etapa Abordagem recomendada Windows versão
Desenvolvimento e teste locais CLI do WinApp (certificado autoassinado) Windows 10 e posterior
Distribuir para testadores (instalação direta) Certificado autoassinado com a etapa de estabelecimento de confiança do certificado Windows 10 e posterior
Distribuição de produção Assinatura de Artefatos do Azure (anteriormente Trusted Signing) Windows 10 versão 1809 e posterior, Windows Server 2016 e posterior
distribuição da Microsoft Store Assinado pela Loja durante o envio Todas as versões de Windows com suporte

Desenvolvimento: Assinatura de código para testes locais

Para desenvolvimento local, use um certificado autoassinado. Pacotes autoassinados só podem ser instalados em computadores em que o certificado é explicitamente confiável , isso é intencional e apropriado para teste.

Importante

A CLI de Desenvolvimento de Aplicativos do Windows está atualmente em prévia pública e requer Windows 10 com WinGet instalado.

CLI do WinApp lida com a geração e assinatura de certificados em uma única etapa.

Etapa 1: Instalar a CLI do WinApp

winget install -e --id Microsoft.WinAppCLI --source winget

Etapa 2: gerar um certificado de desenvolvimento autoassinado

winapp cert generate --manifest .\appxmanifest.xml --output .\devcert.pfx --install

O --manifest flag lê o nome do editor diretamente do seu appxmanifest.xml. O --install sinalizador adiciona o certificado ao repositório de confiança do computador local, para que você possa instalar imediatamente o pacote.

Etapa 3: Assinar o pacote

winapp sign MyApp.msix --cert .\devcert.pfx

Opção B: PowerShell + SignTool (Windows 10 e posterior)

Use essa abordagem se você não estiver usando a CLI do WinApp.

Etapa 1: Criar um certificado autoassinado

Execute o seguinte em um prompt do PowerShell com privilégios elevados. O valor Subject deve corresponder exatamente ao Publisher em seu appxmanifest.xml:

New-SelfSignedCertificate -Type Custom -KeyUsage DigitalSignature `
  -Subject "CN=MyPublisher" `
  -CertStoreLocation "Cert:\CurrentUser\My" `
  -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") `
  -FriendlyName "MyApp Dev Cert"

Observe a impressão digital na saída – você precisará dela nas próximas etapas.

Etapa 2: Exportar o certificado para um arquivo PFX

$password = ConvertTo-SecureString -String "YourPassword" -Force -AsPlainText
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Thumbprint>" `
  -FilePath .\devcert.pfx -Password $password

Etapa 3: Confiar no certificado localmente

Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" `
  -FilePath .\devcert.pfx -Password $password

Etapa 4: Assinar o pacote

SignTool sign /fd SHA256 /a /f .\devcert.pfx /p "YourPassword" MyApp.msix

Para obter o uso completo do SignTool, consulte Assinar um pacote de aplicativo usando SignTool.


Testagem: distribuir aos testadores com um certificado autoassinado

Para instalar um pacote MSIX autoassinado no computador de um testador, o certificado deve ser confiável nesse computador primeiro.

Observação

No Windows 10 versão 2004 e posterior e Windows 11, o sideloading é habilitado por padrão. Em versões anteriores do Windows 10, os testadores devem habilitar aplicativos Sideload em Configurações Atualização & Segurança Para desenvolvedores.

Dê aos testadores o certificado: Compartilhe o .pfx arquivo ou .cer (somente chave pública) ao lado do .msix pacote.

Os testadores executam o seguinte em um prompt do PowerShell com privilégios elevados:

# If you shared a .pfx file (testers need the password)
Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" `
  -FilePath .\devcert.pfx -Password (ConvertTo-SecureString "YourPassword" -Force -AsPlainText)

# If you shared a .cer file (public key only, no password needed)
Import-Certificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" -FilePath .\devcert.cer

Depois de confiar no certificado, os testadores podem instalar o .msix dando um duplo clique nele.

Importante

Certificados autoassinados só devem ser usados para teste. Remova-os dos computadores testador quando não for mais necessário. Para distribuição ampla, use um método de assinatura publicamente confiável.


Produção: Assinatura de Artifact Azure (antigo Trusted Signing)

Aplica-se a: Windows 10 versão 1809 e posterior, Windows 11 (todas as versões), Windows Server 2016 e posterior

Azure Artifact Signing é o novo nome para o que anteriormente era chamado de Assinatura Confiável. O serviço é idêntico , apenas o nome foi alterado. Você ainda poderá ver "Autenticação Confiável" em algumas ferramentas (como a Ação azure/trusted-signing-action GitHub e a ID do pacote winget), pois essas referências estão sendo atualizadas ao longo do tempo.

Azure Assinatura de Artefatos é a opção recomendada para a assinatura de MSIX em produção. A reputação está vinculada à sua identidade verificada em vez de a um certificado específico, o que significa que sua identidade do editor cria a reputação do SmartScreen ao longo do tempo à medida que os usuários instalam seus aplicativos assinados. Consulte a visão geral sobre como assinar um pacote MSIX para obter os requisitos de qualificação e as informações de custo antes de configurar uma conta.

Importante

Disponibilidade de Assinatura de Artefatos do Azure: Organizações nos EUA, Canadá, União Europeia e Reino Unido podem se inscrever para a assinatura. Atualmente, os desenvolvedores individuais estão limitados aos EUA e ao Canadá. Se você for um desenvolvedor individual fora dessas regiões, use um certificado de assinatura de código OV de uma AC (consulte Produção: certificado de assinatura de código OV abaixo).

Observação

A assinatura com o serviço Azure Artifact Signing não fornece confiança instantânea do SmartScreen. Assim como os certificados OV, seus aplicativos mostrarão inicialmente um aviso SmartScreen até que sua identidade de publicador crie reputação de download suficiente, normalmente em várias semanas e centenas de instalações limpas. Esse é o comportamento esperado para novos editores. Para obter detalhes sobre como funciona a reputação do SmartScreen e o que esperar como um novo publicador, consulte reputação do SmartScreen para desenvolvedores de aplicativos do Windows.

Pré-requisitos

  • Uma conta de Assinatura de Artefato com validação de identidade concluída e um perfil de certificado criado. Confira o início rápido da Assinatura de Artefatos.
  • A função Signatário de Perfil de Certificado de Assinatura Confiável atribuída à identidade usada para assinatura.

Etapa 1: Instalar Ferramentas do Cliente de Assinatura de Artefatos

As Ferramentas de Cliente de Assinatura de Artefato incluem o plug-in dlib necessário, uma versão compatível do SignTool e o runtime .NET 8. A sintaxe do Standard SignTool não pode ser utilizada para Assinatura de Artefatos sem este pacote.

winget install -e --id Microsoft.Azure.ArtifactSigningClientTools

Se o WinGet não estiver disponível (por exemplo, em um agente de build Windows Server), instale por meio do PowerShell como administrador:

$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri "https://download.microsoft.com/download/70ad2c3b-761f-4aa9-a9de-e7405aa2b4c1/ArtifactSigningClientTools.msi" -OutFile .\ArtifactSigningClientTools.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I ArtifactSigningClientTools.msi /quiet'
Remove-Item .\ArtifactSigningClientTools.msi

Etapa 2: Criar um arquivo JSON de metadados

Crie um arquivo nomeado metadata.json com os detalhes da sua conta de Assinatura de Artefato. O URI do ponto de extremidade deve corresponder à região Azure em que você criou sua conta (localize-a no portal Azure em sua conta de Assinatura de Artefato como Conta URI):

{
  "Endpoint": "https://<region>.codesigning.azure.net/",
  "CodeSigningAccountName": "<your-account-name>",
  "CertificateProfileName": "<your-certificate-profile-name>"
}

Para obter a lista completa de URIs de ponto de extremidade específicos da região, consulte As integrações de assinatura.

Etapa 3: Autenticar

Defina suas credenciais de Azure como variáveis de ambiente (use as credenciais de Registro de Aplicativo para CI/CD):

$env:AZURE_CLIENT_ID     = "<your-client-id>"
$env:AZURE_TENANT_ID     = "<your-tenant-id>"
$env:AZURE_CLIENT_SECRET = "<your-client-secret>"

Como alternativa, execute az login para assinatura local interativa.

Etapa 4: Assinar o pacote

Use o SignTool instalado com as Ferramentas do Cliente de Assinatura de Artefatos. O /dlib sinalizador aponta para o plug-in dlib instalado na etapa anterior:

signtool sign /v /fd SHA256 `
  /tr "https://timestamp.acs.microsoft.com" /td SHA256 `
  /dlib "C:\Program Files (x86)\Microsoft\ArtifactSigningClientTools\bin\Azure.CodeSigning.Dlib.dll" `
  /dmdf .\metadata.json `
  MyApp.msix

Dica

Use o /debug sinalizador para obter uma saída detalhada se a assinatura falhar , mostrando detalhes de cadeia de certificados e autenticação.

CI/CD: GitHub Actions

Use o oficial azure/trusted-signing-action:

- name: Sign MSIX with Azure Artifact Signing
  uses: azure/trusted-signing-action@v0
  with:
    azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
    azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
    azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
    endpoint: ${{ secrets.AZURE_TRUSTED_SIGNING_ENDPOINT }}
    trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
    certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
    files-folder: ${{ github.workspace }}\output
    files-folder-filter: msix

Para Azure DevOps, consulte Set up Azure DevOps with Trusted Signing.


Produção: distribuição na Microsoft Store

Aplica-se a: Todas as versões do Windows compatíveis

Se você estiver distribuindo por meio do Microsoft Store, não precisará assinar o pacote por conta própria – a Loja o assina durante o processo de envio. Crie seu pacote e envie-o por meio do Partner Center. A Loja fornece uma assinatura globalmente confiável e manipula todo o gerenciamento de certificados.


Produção: certificado de assinatura de código OV

Applies para: Windows 10 e posterior

Se a Assinatura de Artefato não estiver disponível para sua região ou situação, você poderá comprar um certificado de assinatura de código OV (Validação da Organização) de uma AC (autoridade de certificação), como DigiCert, Sectigo ou GlobalSign. Normalmente, os custos variam de US$ 300 a 500/ano.

Depois de ter um arquivo PFX de sua AC:

SignTool sign /fd SHA256 /a /f .\cert.pfx /p "YourPassword" `
  /tr http://timestamp.digicert.com /td SHA256 `
  MyApp.msix

Para obter opções de assinatura completas, consulte Assinar um pacote de aplicativo usando SignTool.

Observação

Os certificados OV não fornecem confiança instantânea do SmartScreen. A reputação é construída ao longo do tempo à medida que seus pacotes assinados são instalados sem serem marcados. Para obter detalhes, consulte Reputação do SmartScreen para desenvolvedores de aplicativos do Windows.