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:
- Arquivos
PFX
,P7B
ouCER
- Importado para o Gerenciador de Certificados do Windows
- Armazenados em um dispositivo USB com acesso por meio de um CSP (Provedor de Serviços de Criptografia)
Instalação do Sign CLI
Abra uma instância PowerShell do Desenvolvedor.
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
- Verifique suas fontes usando
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"