Поделиться через


Подписывание пакетов VSIX

Сборки расширений не обязательно подписывать перед запуском в Visual Studio, но это хорошая практика.

Добавление цифровой подписи в пакет VSIX защищает расширение и предотвращает изменение. Во время установки установщик VSIX отображает подпись и ссылку на сертификат. Если содержимое VSIX изменяется без обновления подписи, установщик предупреждает пользователя о недопустимой подписи пакета. В этом руководстве предполагается, что вы уже создали VSIX.

Получение сертификата подписи кода

Допустимые сертификаты можно получить из общедоступного центра сертификации, например:

Полный список доверенных центров сертификации Windows также можно получить из http://aka.ms/trustcertpartners.

Для тестирования можно использовать выпущенные самостоятельно сертификаты. Однако пакеты VSIX, подписанные с помощью самоподписанных сертификатов, не принимаются на Visual Studio Marketplace. Узнайте больше о создании самоподписанных сертификатов с помощью .NET CLI.

Подписывание VSIX с помощью интерфейса командной строки для подписи

Средство VSIXSignTool устарело в пользу Sign CLI (github.com). Это средство публикуется в NuGet как инструмент dotnet в подписи (nuget.org) и поддерживает локальную подпись или подписывание в облаке Azure Key Vault.

Для локальной подписи Sign CLI поддерживает сертификаты и закрытые ключи, хранящиеся в любом сочетании этих мест:

  • PFX, P7Bили файлы CER
  • Импортированный в диспетчер сертификатов Windows
  • Данные, хранящиеся на USB-устройстве, доступны через криптографический поставщик услуг (CSP) .

Установка интерфейса командной строки для подписи

  1. Откройте экземпляр разработчика PowerShell.

  2. Убедитесь, что nuget.org добавлена и включена в качестве источника NuGet.

    • Проверка источников с помощью dotnet nuget list source
    • Добавьте NuGet.org в качестве источника, используя dotnet nuget add source -n NuGet.org https://api.nuget.org/v3/index.json
  3. Установите пакет Sign, выполнив dotnet tool install sign --version <version> --global, где <version> — последняя доступная версия пакета Sign на сайте nuget.org.

    • --global является необязательным и устанавливает средство в расположении инструментов .NET по умолчанию, которое автоматически добавляется в переменную среды PATH.

Офлайн установка Sign CLI

Для изолированных сред можно скачать последнюю версию пакета NuGet для Sign CLI и установить её с помощью:

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 можно вызвать в экземпляре PowerShell для разработчиков с помощью sign code <command> <options>. Для получения сведений о параметрах см. справочник интерфейса командной строки для пакетов VSIX. Чтобы получить справку через командную строку, введите команду sign code -h.

Важный

Sign CLI поддерживает только SHA-256, SHA-384и SHA-512 в качестве допустимых алгоритмов отпечатков пальцев. PowerShell можно использовать для получения отпечатков пальцев с помощью: Get-FileHash -Algorithm SHA256 <path to .cer file> | Format-Table -AutoSize

  • Подписывание с помощью PFX-файла с отпечатком пальца 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"

Заметка

PFX-файлы содержат как сертификат, так и закрытый ключ, используемые для подписывания, и не соответствуют требованиям форума браузера C/A для расширенной проверки (EV) и подписывания, отличного от EV. Рекомендуется использовать только закрытые ключи, хранящиеся на устройстве HSM и доступ к ним с помощью поставщика служб шифрования (CSP).

  • Подписывание с помощью Microsoft Certificate Manager и отпечатка 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"