簽署 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)。 此工具會作為 Sign (nuget.org) 下的 dotnet 工具發佈到 NuGet,並支援本機簽署或使用 Azure Key Vault 雲端簽署。

對於本機簽名,Sign CLI 支援儲存在以下位置的任意組合中的憑證和私密金鑰:

正在安裝 Sign CLI

  1. 開啟 Developer 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,並將該工具安裝在 .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> 在 Developer PowerShell 執行個體中存取 Sign CLI。 有關選項的詳細資訊,請參閱VSIX 封裝的 Sign CLI 參考

重要

Sign 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 檔案包含用於簽署的憑證和私密新鑰,並且不符合 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"