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 seuPackage.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:
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âmetro | O que faz |
|---|---|
-Type Custom | Cria 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 DigitalSignature | Marca 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 Details → Enhanced 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:
# 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:
<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ê.
$password = ConvertTo-SecureString -String "YourPassword" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "codesign.pfx" -Password $passwordCER (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.
Export-Certificate -Cert $cert -FilePath "codesign.cer"Referência rápida
| Formato | Contém Chave Privada? | Uso |
|---|---|---|
.pfx | Sim | Assinar pacotes (Visual Studio, signtool) |
.cer | Não | Instalar 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
- Clique duas vezes no arquivo
.cer→ Install Certificate - Selecione Local Machine → Browse → selecione Pessoas Confiáveis (Trusted People)
- Complete o assistente
Alternativamente, via 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:
# Lista todos os certificados de assinatura de código no repositório pessoal
Get-ChildItem -Path "Cert:\CurrentUser\My" -CodeSigningCert | Format-Table Subject, Thumbprint, NotAfterA 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:
- Clique com o botão direito no projeto → Package and Publish → crie um novo perfil de empacotamento
- Na etapa Select Signing Certificate, clique em Select from File...
- Navegue até seu arquivo
.pfxe digite a senha - 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:
- Na etapa de assinatura, expanda o menu suspenso em vez de clicar em "Select from File..."
- Procure seu certificado na lista (identificado pelo CN que você especificou)
- 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
.cerpara 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:
Get-ChildItem -Path "Cert:\CurrentUser\My" -CodeSigningCert | Format-Table Subject, NotAfterAo 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
*.pfxao 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.