对 VSIX 包进行签名
扩展程序集在 Visual Studio 中运行前不需要签名,但签名是个好习惯。
为 VSIX 包添加数字签名可确保扩展的安全并防止篡改。 在安装过程中,VSIX 安装程序会显示签名和证书链接。 如果在未更新签名的情况下修改了 VSIX 的内容,安装程序只会警告用户包签名无效。 本指南假定你已创建一个 VSIX。
获取代码签名证书
可以从公共证书颁发机构获取有效的证书,例如:
还可从 http://aka.ms/trustcertpartners 获取 Windows 信任的证书颁发机构完整列表。
可使用自颁发证书进行测试。 但是,Visual Studio Marketplace 不接受使用自发证书签署的 VSIX 包。 详细了解使用 .NET CLI 生成自签名证书。
使用 Sign CLI 对 VSIX 进行签名
VSIXSignTool 已被弃用,改为使用 Sign CLI (github.com)。 此工具作为 Sign (nuget.org) 下的 dotnet 工具发布到 NuGet,支持本地签名或使用 Azure Key Vault 云签名。
对于本地签名,Sign CLI 支持存储在上述任意位置组合中的证书和私钥:
PFX
、P7B
或CER
文件- 导入 Windows 证书管理器
- 存储在 USB 设备中,可通过加密服务提供程序 (CSP) 来访问
安装 Sign CLI
打开开发人员 PowerShell 实例。
确认 nuget.org 已添加并作为 NuGet 源被启用。
- 使用
dotnet nuget list source
检查源 - 使用
dotnet nuget add source -n NuGet.org https://api.nuget.org/v3/index.json
将 NuGet.org 添加为源
- 使用
通过运行
dotnet tool install sign --version <version> --global
来安装 Sign,其中<version>
是 Sign (nuget.org) 下的最新可用版本。--global
是可选项,可将工具安装到 .NET 工具的默认位置,该位置会自动添加到 PATH 环境变量中。
离线安装 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
安装后,可使用 sign code <command> <options>
在开发人员 PowerShell 实例中访问 Sign CLI。 有关选项的明细,请参阅 VSIX 包的 Sign CLI 参考。
重要
Sign CLI 仅支持 SHA-256
、SHA-384
和 SHA-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 文件包含用于签名的证书和私钥,不符合 C/A 浏览器论坛对扩展验证 (EV) 和非 EV 签名的要求。 建议只使用存储在加固安全模块 (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"
- 使用 USB 驱动器中的私钥进行签名(-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"