Assinatura de pacotes VSIX

As assemblies de extensão não precisam ser assinadas antes de serem executadas no Visual Studio, mas é uma boa prática fazê-lo.

Adicionar uma assinatura digital a um pacote VSIX protege sua extensão e impede a violação. Durante a instalação, o instalador 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 pelo Windows também pode ser obtida de http://aka.ms/trustcertpartners.

Você pode usar certificados auto-emitidos para fins de teste. No entanto, os pacotes VSIX assinados usando certificados auto-emitidos 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 o Sign CLI

O VSIXSignTool foi preterido pela CLI de Assinatura (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 Interface de Linha de Comando do Sign suporta certificados e chaves privadas armazenadas em qualquer combinação dos seguintes locais:

Instalação do Sign CLI

  1. Abra uma instância PowerShell do Desenvolvedor.

  2. Verifique se nuget.org está adicionado e habilitado como uma fonte do NuGet.

    • Verifique suas fontes usando dotnet nuget list source
    • Adicionar NuGet.org como fonte 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, em que <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 é automaticamente adicionada à variável de ambiente PATH.

Instalação offline da Sign CLI

Para ambientes isolados, você pode baixar o pacote NuGet mais recente do Sign CLI 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

Uso do Sign CLI

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, confira Referência da CLI de Assinatura para pacotes VSIX. Você pode obter ajuda da linha de comando digitando sign code -h.

Importante

A CLI do Sign só dá suporte a SHA-256, SHA-384 e 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

  • Assinar 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"

Nota

Os arquivos PFX contêm certificado e chave privada usados para assinatura e não estão em conformidade com os requisitos do Fórum do Navegador C/A para validação estendida (EV) e assinatura não EV. É recomendável usar apenas chaves privadas armazenadas em um dispositivo HSM (Hardened Secure Module) e acessá-las usando um CSP (Provedor de Serviços Criptográficos).

  • Assinatura usando o Microsoft Certificate Manager e uma impressão digital SHA512 (-csp opção):
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"
  • Assinar usando uma chave privada em uma unidade USB (-csp opção):
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"
  • Assinar usando uma unidade USB usando um contêiner de chave específico ( opções de-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"