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

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

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

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

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

Для тестирования можно использовать самовыданные сертификаты. Однако NuGet.org не принимает пакеты, подписанные с помощью самостоятельно выданных сертификатов. Дополнительные сведения см. в разделе Создание тестового сертификата.

Экспорт файла сертификата

  • Вы можете экспортировать существующий сертификат в двоичный формат DER, используя мастер экспорта сертификатов.

    Certificate Export Wizard

  • Вы можете также экспортировать сертификат с помощью команды Export-Certificate PowerShell.

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

Подпишите пакет, выполнив команду dotnet nuget sign (требуется пакет SDK для .NET 6.0.100 или более поздней версии).

dotnet nuget sign MyPackage.nupkg --certificate-path <PathToTheCertificate> --timestamper <TimestampServiceURL>

or

Подпишите пакет, выполнив команду nuget sign (требуется файл nuget.exe 4.6.0 или более поздней версии):

nuget sign MyPackage.nupkg -CertificatePath <PathToTheCertificate> -Timestamper <TimestampServiceURL>

Совет

Поставщик сертификатов также часто предоставляет URL-адрес сервера меток времени, который можно указать в качестве значения необязательного аргумента Timestamper выше. Чтобы получить URL-адрес этой службы, обратитесь к документации и (или) в службу поддержки своего поставщика.

  • Вы можете использовать сертификат, доступный в хранилище сертификатов, или сертификат из файла. См. справочник по CLI для nuget sign.
  • Подписанные пакеты должны включать метку времени, чтобы подпись оставалась действительной после истечения срока действия сертификата для подписывания. В противном случае операция sign вызовет предупреждение.
  • Просмотреть сведения о подписи заданного пакета можно с помощью nuget verify.

Регистрация сертификата на сайте NuGet.org

Чтобы опубликовать подписанный пакет, сначала нужно зарегистрировать сертификат на сайте NuGet.org. Вам потребуется сертификат в виде файла .cer в двоичном формате DER.

  1. Войдите на сайт NuGet.org.
  2. Перейдите в Account settings (или Manage Organization>Edit Organization, если вы хотите зарегистрировать сертификат в учетной записи организации).
  3. Разверните раздел Certificates и выберите Register new.
  4. Найдите и выберите файл сертификата, экспортированного ранее. Registered Certificates

Примечание.

  • Один пользователь может отправить несколько сертификатов. Один и тот же сертификат может быть зарегистрирован несколькими пользователями.
  • После регистрации сертификата все будущие отправки пакетов должны быть подписаны с помощью одного из сертификатов. См. раздел Управление требованиями к подписи для вашего пакета на сайте NuGet.org
  • Пользователи могут также удалить зарегистрированный сертификат из учетной записи. После удаления сертификата новые пакеты, подписанные с его помощью, вызовут сбой при отправке. Существующие пакеты не будут затронуты.

Публикация пакета

Теперь вы готовы опубликовать пакет в NuGet.org. См. статью "Публикация пакетов".

Создание тестового сертификата

Для тестирования можно использовать самовыданные сертификаты. Чтобы создать самовыданный сертификат, используйте команду New-SelfSignedCertificate PowerShell.

New-SelfSignedCertificate -Subject "CN=NuGet Test Developer, OU=Use for testing purposes ONLY" `
                          -FriendlyName "NuGetTestDeveloper" `
                          -Type CodeSigning `
                          -KeyUsage DigitalSignature `
                          -KeyLength 2048 `
                          -KeyAlgorithm RSA `
                          -HashAlgorithm SHA256 `
                          -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
                          -CertStoreLocation "Cert:\CurrentUser\My" 

Эта команда создает тестовый сертификат, доступный в личном хранилище сертификатов текущего пользователя. Вы можете открыть хранилище сертификатов, запустив certmgr.msc, чтобы просмотреть созданный сертификат.

Предупреждение

NuGet.org не принимает пакеты, подписанные с помощью самовыданных сертификатов.

Управление требованиями к подписи для пакета на сайте NuGet.org

  1. Войдите на сайт NuGet.org.

  2. Перейдите по адресу Manage PackagesConfigure package signers.

  • Если вы являетесь единственным владельцем пакета, вы являетесь обязательным подписчиком, то есть вы можете использовать любой из зарегистрированных сертификатов для подписывания и публикации пакетов в NuGet.org.

  • Если у пакета несколько владельцев, по умолчанию для подписания можно использовать любые сертификаты владельца. Как совладелец пакета, вы можете указать себя или совладельца вместо значения "Любой". Если вы сделаете владельцем пользователя, у которого нет зарегистрированного сертификата, неподписанные пакеты будут запрещены.

  • Аналогично если по умолчанию для пакета, в котором у одного владельца зарегистрирован сертификат, а у другого — не зарегистрирован, выбран параметр "Любой", то в этом случае NuGet.org принимает подписанный пакет с подписью, зарегистрированной одним из владельцев, или неподписанный пакет (так как у одного из владельцев не зарегистрирован сертификат).