为 VSIX 包签名

扩展程序集无需在 Visual Studio 中运行之前进行签名,但这样做是一个很好的做法。

将数字签名添加到 VSIX 包可保护扩展并防止篡改。 在安装过程中,VSIX 安装程序会显示签名和证书链接。 如果在不更新签名的情况下修改 VSIX 的内容,安装程序只会警告用户无效的包签名。 本指南假定你已创建 VSIX

获取代码签名证书

可以从公共证书颁发机构获取有效的证书,例如:

Windows 信任的证书颁发机构的完整列表也可以从 http://aka.ms/trustcertpartners获取。

可以使用自颁发的证书进行测试。 但是,Visual Studio Marketplace 不接受使用自颁发证书签名的 VSIX 包。 详细了解如何使用 .NET CLI 生成自签名证书

使用 Sign CLI 工具为 VSIX 进行签名

VSIXSignTool 已被弃用,改用 Sign CLI (github.com)。 此工具作为 签名(nuget.org)下的 dotnet 工具发布到 NuGet,支持本地签名或使用 Azure Key Vault 云签名。

对于本地签名,Sign CLI 支持存储在这些位置的任意组合中的证书和私钥:

  • PFXP7BCER 文件
  • 已导入 Windows 证书管理器
  • 存储在 USB 设备中,并通过 加密服务提供商(CSP)访问。

安装 Sign CLI

  1. 打开 开发人员 PowerShell 实例。

  2. 验证是否已添加并启用 nuget.org 作为 NuGet 源。

    • 使用 dotnet nuget list source 检查源
    • 使用 dotnet nuget add source -n NuGet.org https://api.nuget.org/v3/index.json 将 NuGet.org 添加为源
  3. 通过运行 dotnet tool install sign --version <version> --global安装 Sign,其中 <version>Sign(nuget.org)下的最新可用版本。

    • --global 是可选的,并在自动添加到 PATH 环境变量的 .NET 工具默认位置安装该工具。

Sign CLI 的脱机安装

对于独立环境,您可以下载最新的 Sign CLI NuGet 包,并通过以下步骤进行安装:

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

例如:

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

使用 Sign CLI

安装后,可以在开发者的 PowerShell 实例中使用 sign code <command> <options>访问签名 CLI。 有关选项的详细说明,请参阅 VSIX 包的 Sign CLI 参考。 可以通过键入 sign code -h从命令行获取帮助。

重要

签名 CLI 仅支持有效指纹算法 SHA-256SHA-384SHA-512。 可以使用 PowerShell 来获取指纹:Get-FileHash -Algorithm SHA256 <path to .cer file> | Format-Table -AutoSize

  • 使用具有 SHA-256 指纹的 PFX 文件进行签名:
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"

说明

PFX 文件包含用于签名的证书和私钥,并且不符合扩展验证(EV)和非 EV 签名的 C/A 浏览器论坛要求。 建议仅使用存储在强化安全模块(HSM)设备中的私钥,并使用加密服务提供程序(CSP)访问它们。

  • 使用Microsoft证书管理器和 SHA512 指纹进行签名(-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"
  • 使用 U 盘中的私钥进行签名(-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"
  • 使用特定密钥容器使用 USB 驱动器签名(-csp 和 -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"