Подписыв пакет NuGet
Подписанный пакет позволяет проверять целостность содержимого, что обеспечивает защиту от изменения содержимого. Подпись пакетов также предоставляет истинные сведения о фактическом источнике пакета и подтверждает его подлинность для клиента. В этом руководстве предполагается, что вы уже создали пакет.
Получение сертификата для подписи кода
Допустимые сертификаты можно получить из общедоступного центра сертификации, например:
Полный список доверенных центров сертификации Windows также можно получить из http://aka.ms/trustcertpartners.
Для тестирования можно использовать самовыданные сертификаты. Однако NuGet.org не принимает пакеты, подписанные с помощью самостоятельно выданных сертификатов. Дополнительные сведения см. в разделе Создание тестового сертификата.
Экспорт файла сертификата
Вы можете экспортировать существующий сертификат в двоичный формат DER, используя мастер экспорта сертификатов.
Вы можете также экспортировать сертификат с помощью команды 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.
- Войдите на сайт NuGet.org.
- Перейдите в
Account settings
(илиManage Organization
>Edit Organization
, если вы хотите зарегистрировать сертификат в учетной записи организации). - Разверните раздел
Certificates
и выберитеRegister new
. - Найдите и выберите файл сертификата, экспортированного ранее.
Примечание.
- Один пользователь может отправить несколько сертификатов. Один и тот же сертификат может быть зарегистрирован несколькими пользователями.
- После регистрации сертификата все будущие отправки пакетов должны быть подписаны с помощью одного из сертификатов. См. раздел Управление требованиями к подписи для вашего пакета на сайте 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
Войдите на сайт NuGet.org.
Перейдите по адресу
Manage Packages
Если вы являетесь единственным владельцем пакета, вы являетесь обязательным подписчиком, то есть вы можете использовать любой из зарегистрированных сертификатов для подписывания и публикации пакетов в NuGet.org.
Если у пакета несколько владельцев, по умолчанию для подписания можно использовать любые сертификаты владельца. Как совладелец пакета, вы можете указать себя или совладельца вместо значения "Любой". Если вы сделаете владельцем пользователя, у которого нет зарегистрированного сертификата, неподписанные пакеты будут запрещены.
Аналогично если по умолчанию для пакета, в котором у одного владельца зарегистрирован сертификат, а у другого — не зарегистрирован, выбран параметр "Любой", то в этом случае NuGet.org принимает подписанный пакет с подписью, зарегистрированной одним из владельцев, или неподписанный пакет (так как у одного из владельцев не зарегистрирован сертификат).