Compartilhar via


Assinar pacotes VSIX

Os assemblies de extensão não precisam ser assinados antes de serem executados no Visual Studio, mas é uma boa prática fazer isso.

Adicionar uma assinatura digital a um pacote VSIX protege sua extensão e evita adulterações. Durante a instalação, o instalador do VSIX exibe a assinatura e um link para o certificado. Se o conteúdo do VSIX for modificado sem atualizar a assinatura, o instalador avisará apenas o usuário sobre uma assinatura de pacote inválida. Este guia pressupõe que você já criou um VSIX.

Obter um certificado de assinatura de código

Certificados válidos podem ser obtidos de uma autoridade de certificação pública, como:

A lista completa de autoridades de certificação confiáveis para Windows também pode ser obtida em http://aka.ms/trustcertpartners.

Você pode usar certificados emitidos por conta própria para fins de teste. No entanto, os pacotes VSIX assinados com certificados emitidos por conta própria não são aceitos pelo Visual Studio Marketplace. Saiba mais sobre como gerar certificados autoassinados com a CLI do .NET.

Assinatura de um VSIX com a CLI do Sign

O VSIXSignTool foi preterido em favor da CLI do Sign (github.com). Essa ferramenta é publicada no NuGet como uma ferramenta dotnet em Sign (nuget.org) e dá suporte à assinatura local ou ao uso da assinatura de nuvem do Azure Key Vault.

Para assinatura local, a CLI do Sign oferece suporte a certificados e chaves privadas armazenadas em qualquer combinação destes locais:

  • PFX, P7B ou arquivos CER
  • Importado para o Gerenciador de Certificados do Windows
  • Armazenado em um dispositivo USB com acesso por meio de um Provedor de Serviços Criptográficos (CSP)

Instalação da CLI do Sign

  1. Abra uma instância do PowerShell do Desenvolvedor.

  2. Verifique se nuget.org foi adicionado e habilitado como uma origem do NuGet.

    • Verifique suas origens usando dotnet nuget list source
    • Adicione o NuGet.org como uma origem usando dotnet nuget add source -n NuGet.org https://api.nuget.org/v3/index.json
  3. Instale o Sign executando dotnet tool install sign --version <version> --global, onde <version> é a versão mais recente disponível em Sign (nuget.org).

    • --global é opcional e instala a ferramenta no local padrão das ferramentas .NET que é adicionado automaticamente à variável de ambiente PATH.

Instalação offline da CLI do Sign

Para ambientes isolados, você pode baixar o pacote NuGet da CLI do Sign mais recente e instalá-lo usando:

dotnet tool install --global --add-source <path-to-folder> <tool-name> --version <version>

Por exemplo:

dotnet tool install --global --add-source D:\NuGetTools sign --version 99.0

Usando a CLI do Sign

Depois de instalada, a CLI do Sign pode ser acessada em uma instância do PowerShell do Desenvolvedor usando sign code <command> <options>. Para obter um detalhamento das opções, consulte Referência da CLI do Sign para pacotes VSIX.

Importante

A CLI do Sign só dá suporte a SHA-256, SHA-384 e a SHA-512 como algoritmos de impressão digital válidos. Você pode usar o PowerShell para obter impressões digitais usando: Get-FileHash -Algorithm SHA256 <path to .cer file> | Format-Table -AutoSize

  • Assinatura usando um arquivo PFX com uma impressão digital SHA-256:
sign code certificate-store -cfp 80BB567B...52CB95D4C -cf "D:\Certs\f5ec6169345347a7cd2f83af662970d5d0bfc914.pfx" -d "My VSIX Signature" -t "http://timestamp.acs.microsoft.com/" "C:\Users\Contoso\Downloads\FingerSnapper2022.vsix"

Observação

Os arquivos PFX contêm certificado e chave privada usados para assinatura e não estão em conformidade com os requisitos do C/A Browser Forum para Validação Estendida (EV) e assinatura não EV. é recomendável usar apenas chaves privadas armazenadas em um dispositivo Módulo de Segurança Protegido (HSM) e acessá-las usando um Provedor de Serviços Criptográficos (CSP).

  • Assinatura usando o Gerenciador de Certificados da Microsoft e uma impressão digital SHA512 (opção -csp):
sign code certificate-store -cfp A87A60A6F...894559B98 -csp "Microsoft Software Key Storage Provider" -d "VSIX Signature" -t "http://timestamp.acs.microsoft.com/" "C:\Users\Contoso\Downloads\FingerSnapper2022.vsix"
  • Assinatura usando uma chave privada em uma unidade USB (opção -csp):
sign code certificate-store -cfp B113E82D...F5CF294BE0B -csp "eToken Base Cryptographic Provider" -d "VSIX Signature" -t "http://timestamp.acs.microsoft.com/" "C:\Users\Contoso\Downloads\FingerSnapper2022.vsix"
  • Assinatura usando uma unidade USB usando um contêiner de chave específico (opções -csp e -k):
sign code certificate-store -cfp 15BB56B0...1ACB959D0 -csp "eToken Base Cryptographic Provider" -k "NuGet Signing.629c9149345347cd2f83af6f5ec70d5d0a7bf616" -d "VSIX Signature" -t "http://timestamp.acs.microsoft.com/" "C:\Users\Contoso\Downloads\FingerSnapper2022.vsix"