Criar um certificado para a assinatura de pacote

Neste artigo, você aprenderá como criar e exportar um certificado para assinatura de pacote de aplicativo usando as ferramentas do PowerShell. É recomendável usar o Visual Studio para empacotar aplicativos UWP e empacotar aplicativos da área de trabalho, mas você ainda pode empacotar um aplicativo manualmente se não tiver usado o Visual Studio para desenvolvê-lo.

Pré-requisitos

  • Um aplicativo empacotado ou não empacotado
    Um aplicativo que inclui um arquivo AppxManifest.xml. Você precisará fazer referência ao arquivo de manifesto ao criar o certificado que será usado para assinar o pacote final do aplicativo. Para obter detalhes sobre como empacotar um aplicativo manualmente, acesse Criar um pacote de aplicativo com a ferramenta MakeAppx.exe.

  • Cmdlets de PKI (infraestrutura de chave pública)
    Você precisa de cmdlets de PKI para criar e exportar o certificado de autenticação. Para obter mais informações, consulte Public Key Infrastructure Cmdlets (Cmdlets de infraestrutura de chave pública).

Criar um certificado autoassinado

Um certificado autoassinado é útil para testar o aplicativo antes de ele estar pronto para ser publicado na Store. Siga as etapas descritas nesta seção para criar um certificado autoassinado.

Observação

Ao criar e usar um certificado autoassinado, apenas os usuários que instalarem e confiarem no certificado serão capazes de executar o aplicativo. É fácil implementar isso para testes, mas isso pode impedir que outros usuários instalem o aplicativo. Quando estiver pronto para publicar o aplicativo, recomendamos que você use um certificado emitido por uma fonte confiável. Esse sistema de confiança centralizada ajuda a garantir que o ecossistema de aplicativos tenha níveis de verificação para proteger os usuários contra agentes maliciosos.

Defina a entidade do aplicativo empacotado

Para usar um certificado para assinar o pacote do aplicativo, a "Entidade" no certificado deve corresponder à seção "Fornecedor" no manifesto do aplicativo.

Por exemplo, a seção "Identidade" no arquivo AppxManifest.xml do aplicativo deve se parecer com isto:

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

Neste caso, o "Fornecedor" é "CN=Contoso Software, O=Contoso Corporation, C=US", que precisa ser usado para criar o certificado.

Use New-SelfSignedCertificate para criar um certificado

Use o cmdlet PowerShell New-SelfSignedCertificate para criar um certificado autoassinado. O comando New-SelfSignedCertificate possui diversos parâmetros para personalização, mas, para os propósitos deste artigo, focaremos em criar um certificado simples que funcionará com o SignTool. Para obter mais exemplos e usos desse cmdlet, consulte New-SelfSignedCertificate.

Com base no arquivo AppxManifest.xml do exemplo anterior, utilize a sintaxe a seguir para criar um certificado. Em um prompt do PowerShell elevado:

New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

Observe os detalhes a seguir sobre alguns dos parâmetros:

  • KeyUsage: esse parâmetro define para o que o certificado pode ser usado. Para um certificado autoassinado, esse parâmetro deve ser configurado como DigitalSignature.

  • TextExtension: esse parâmetro inclui configurações para as seguintes extensões:

    • Uso estendido de chave (EKU): essa extensão indica finalidades adicionais para as quais a chave pública certificada pode ser usada. Para um certificado autoassinado, esse parâmetro deve incluir a cadeia de caracteres de extensão "2.5.29.37={text}1.3.6.1.5.5.7.3.3", o que indica que o certificado deve ser usado para assinatura de código.

    • Restrições básicas: essa extensão indica se o certificado é ou não uma autoridade de certificação (AC). Para um certificado autoassinado, esse parâmetro deve incluir a cadeia de caracteres de extensão "2.5.29.19={text}", o que indica que o certificado é uma entidade final (não uma AC).

Depois de executar esse comando, o certificado será adicionado ao repositório de certificados local, conforme especificado no parâmetro "-CertStoreLocation". O resultado do comando também fornecerá a impressão digital do certificado.

Você pode visualizar o certificado em uma janela do PowerShell usando os seguintes comandos:

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

Isso exibirá todos os certificados no armazenamento local.

Exportar um certificado

Para exportar o certificado no armazenamento local para um arquivo de Troca de Informações Pessoais (PFX), use o cmdlet Export-PfxCertificate.

Ao usar o Export-PfxCertificate, você deve criar e usar uma senha ou usar o parâmetro "-ProtectTo" para especificar quais usuários ou grupos podem acessar o arquivo sem senha. Observe que um erro será exibido se você não usar o parâmetro "-Password" ou "-ProtectTo".

Uso de “Password”

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

Uso de “ProtectTo”

Export-PfxCertificate -cert Cert:\CurrentUser\My\<Certificate Thumbprint> -FilePath <FilePath>.pfx -ProtectTo <Username or group name>

Depois de criar e exportar o certificado, você está pronto para assinar o pacote do aplicativo com o SignTool. Para a próxima etapa no processo de empacotamento manual, consulte Assinar um pacote de aplicativo usando o SignTool.

Considerações de segurança

Ao adicionar um certificado aos armazenamentos de certificados do computador local, você afeta a confiança no certificado de todos os usuários no computador. É recomendável remover esses certificados quando não forem mais necessários para impedir que sejam usados para comprometer a confiança do sistema.