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.