Skip to content

Certificados de Assinatura de Código Autoassinados para MSIX: Um Guia Prático

2026-06-02

Tags: Windows · Microsoft Store · MSIX · Armadilhas da Store


No artigo anterior, percorremos todo o fluxo de testes MSIX pré-envio. Uma etapa que apareceu repetidamente foi lidar com certificados autoassinados — instalá-los no repositório Pessoas Confiáveis (Trusted People), empacotar com o certificado correto e assim por diante. Mas aquele artigo deixou de lado uma pergunta importante: como você realmente cria um?

Este guia cobre tudo que você precisa saber sobre certificados de assinatura de código autoassinados para empacotamento MSIX: criá-los, exportá-los, usá-los no Visual Studio e gerenciá-los em sua equipe.

Por que o MSIX Precisa de Assinatura

Pacotes MSIX devem ser assinados digitalmente antes de poderem ser instalados. Isso não é opcional — mesmo para sideload e testes locais, o sistema operacional exige uma assinatura válida em cada arquivo .msix.

Para distribuição pela Store, a Microsoft assina seu pacote com o próprio certificado após a certificação. Mas para testes locais e sideload, você precisa de um certificado próprio. É aqui que entram os certificados autoassinados: eles permitem que você assine pacotes para desenvolvimento e testes sem comprar um certificado de assinatura de código comercial.

O processo de assinatura serve a dois propósitos:

  • Integridade: Garante que o pacote não foi adulterado após a assinatura
  • Identidade: Identifica o editor (você) — o CN (Common Name) no certificado deve corresponder ao valor <Publisher> no seu Package.appxmanifest

Usando o New-SelfSignedCertificate

O Windows inclui o cmdlet PowerShell New-SelfSignedCertificate, que pode gerar certificados para fins de teste. Abra o PowerShell como Administrador e tente o seguinte:

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

Vamos detalhar cada parâmetro:

ParâmetroO que faz
-Type CustomCria um certificado personalizado em vez de um básico
-Subject "CN=YourCompany"Define o Common Name — deve corresponder ao Publisher do seu aplicativo no Package.appxmanifest
-KeyUsage DigitalSignatureMarca o certificado para uso de assinatura digital
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")Extended Key Usage definido como Code Signing (1.3.6.1.5.5.7.3.3), mais Basic Constraints definido como End Entity (2.5.29.19) — exigido pelo mecanismo de implantação do Windows para pacotes de aplicativos
-CertStoreLocation "Cert:\CurrentUser\My"Armazena o certificado no repositório Personal do usuário atual

Sem ambos os valores TextExtension, o certificado pode não ser totalmente reconhecido — o OID Basic Constraints o marca como End Entity (não uma CA), que o mecanismo de implantação do Windows verifica ao validar pacotes MSIX. Sua ausência pode causar erros de implantação ou avisos do WACK em algumas versões do Windows.

Nota: Em meus próprios projetos, usei certificados autoassinados sem a extensão Basic Constraints e eles funcionaram sem problemas. A restrição é uma prática recomendada pela Microsoft, mas não é estritamente necessária para cenários de desenvolvimento e sideloading.

Criando o Certificado com EKU de Code Signing

Se você já criou um certificado sem o EKU de Code Signing, ainda pode verificar se ele possui as propriedades corretas. Abra o certificado (via certlm.msc) e verifique DetailsEnhanced Key Usage — você deve ver Code Signing listado.

Aqui está um script prático que cria um certificado e o prepara para uso com MSIX:

powershell
# Cria um certificado de assinatura de código autoassinado (Code Signing EKU + Basic Constraints)
$cert = New-SelfSignedCertificate -Type Custom -Subject "CN=YourCompany" -KeyUsage DigitalSignature -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") -CertStoreLocation "Cert:\CurrentUser\My"

# Exibe os detalhes do certificado
$cert | Format-List Subject, Thumbprint, NotAfter

# Exibe a impressão digital para referência fácil
Write-Host "Impressão digital do certificado: $($cert.Thumbprint)"

Substitua "CN=YourCompany" pelo nome real do seu editor. Você pode encontrar o nome do editor no Package.appxmanifest sob o elemento Identity:

xml
<Identity Name="YourApp" Publisher="CN=YourCompany" Version="1.0.0.0" />

Exportando PFX vs CER

Após criar o certificado, você geralmente precisará de dois tipos de arquivos:

PFX (Personal Information Exchange)

Contém a chave privada + certificado. É o que o Visual Studio usa para assinar pacotes. Trate-o como uma senha — qualquer pessoa com acesso ao PFX pode assinar pacotes como você.

powershell
$password = ConvertTo-SecureString -String "YourPassword" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "codesign.pfx" -Password $password

CER (Certificate file)

Contém apenas o certificado público (sem chave privada). É o que você distribui para máquinas de teste para que elas confiem em seus pacotes assinados.

powershell
Export-Certificate -Cert $cert -FilePath "codesign.cer"

Referência rápida

FormatoContém Chave Privada?Uso
.pfxSimAssinar pacotes (Visual Studio, signtool)
.cerNãoInstalar em máquinas de teste para estabelecer confiança

Importando o Certificado e Verificando a Impressão Digital

Para instalar pacotes MSIX assinados com seu certificado autoassinado em uma máquina de teste, o certificado deve ser confiável pelo sistema.

Instalar o certificado

  1. Clique duas vezes no arquivo .cerInstall Certificate
  2. Selecione Local MachineBrowse → selecione Pessoas Confiáveis (Trusted People)
  3. Complete o assistente

Alternativamente, via PowerShell:

powershell
Import-Certificate -FilePath "codesign.cer" -CertStoreLocation "Cert:\LocalMachine\TrustedPeople"

Encontrar a impressão digital

Você precisará da impressão digital ao usar ferramentas de linha de comando para assinatura:

powershell
# Lista todos os certificados de assinatura de código no repositório pessoal
Get-ChildItem -Path "Cert:\CurrentUser\My" -CodeSigningCert | Format-Table Subject, Thumbprint, NotAfter

A impressão digital é uma string hexadecimal de 40 caracteres. Copie-a exatamente — você precisará dela para os comandos de assinatura.

Usando o Certificado no Visual Studio

Depois de ter um arquivo PFX, você pode usá-lo no assistente de empacotamento do Visual Studio:

  1. Clique com o botão direito no projeto → Package and Publish → crie um novo perfil de empacotamento
  2. Na etapa Select Signing Certificate, clique em Select from File...
  3. Navegue até seu arquivo .pfx e digite a senha
  4. Complete o assistente de empacotamento

O certificado é salvo no perfil de empacotamento, então você não precisa selecioná-lo novamente toda vez. No entanto, se o certificado expirar ou você mudar para um novo, precisará atualizar o perfil.

Usando o certificado do repositório de certificados

Se você importou o PFX para seu repositório pessoal de certificados, também pode selecioná-lo diretamente:

  1. Na etapa de assinatura, expanda o menu suspenso em vez de clicar em "Select from File..."
  2. Procure seu certificado na lista (identificado pelo CN que você especificou)
  3. Selecione-o e prossiga

Esta abordagem é conveniente, mas tome cuidado — o Visual Studio pode armazenar em cache uma impressão digital específica, e se o certificado for renovado (novo par de chaves), a referência armazenada pode se tornar inválida.

Expiração, Renovação e Re-Assinatura do Certificado

Certificados autoassinados criados com New-SelfSignedCertificate têm validade padrão de 1 ano (algumas versões padrão são de 3 anos — verifique a propriedade NotAfter).

Lista de verificação

  • [ ] Anote a data de expiração do seu certificado
  • [ ] Antes da expiração, crie um novo certificado e re-assine todos os pacotes
  • [ ] Distribua o novo .cer para as máquinas de teste
  • [ ] Atualize o perfil de empacotamento no Visual Studio
  • [ ] Para envios à Store, gere um novo pacote Test com o novo certificado

Para verificar a expiração:

powershell
Get-ChildItem -Path "Cert:\CurrentUser\My" -CodeSigningCert | Format-Table Subject, NotAfter

Ao renovar, crie um novo certificado com o mesmo CN, exporte o novo PFX/CER e re-assine seus pacotes. A impressão digital mudará, portanto, certifique-se de que todas as referências sejam atualizadas.

Dicas para Desenvolvimento em Equipe

Quando vários desenvolvedores precisam assinar pacotes com o mesmo certificado:

  • Armazene o PFX em um local compartilhado seguro — um arquivo protegido por senha no armazenamento da equipe ou um gerenciador de senhas que suporte anexos de arquivos
  • Nunca envie o PFX para o controle de versão — adicione *.pfx ao seu .gitignore
  • Documente a senha no gerenciador de senhas da equipe, não no código ou na documentação
  • Cada desenvolvedor importa o PFX para seu repositório pessoal de certificados e o seleciona no Visual Studio
  • Use o mesmo CN em todos os certificados se precisar criar certificados por desenvolvedor (para builds não destinados à distribuição)

Para pipelines CI/CD, a maioria dos agentes de build suporta a importação de um PFX por meio de variáveis de ambiente seguras ou segredos — consulte a documentação da sua plataforma de CI para a abordagem recomendada.


Este artigo é uma leitura complementar da série Armadilhas da Store.