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


Параметры проверки подписанного пакета NuGet

Повторные попытки ненадежных корневых сбоев

Примечание.

Эта проблема относится только к Windows для корневых сертификатов в программе microsoft Trusted Root Program.

Во время создания цепочки сертификатов Windows извлекает соответствующие 3-сторонние корневые сертификаты при первом использовании и добавляет их как локальные доверенные корневые сертификаты. Внутри системы Windows инициирует получение этой сети с помощью вызова RPC, и если система достаточно занята, этот вызов RPC может завершиться ошибкой. Этот сбой приводит к тому, что корневой сертификат не является локальным доверенным. Эта проблема может возникать при первом обнаружении корневого сертификата, но после локального доверия корневого сертификата проблема не будет повторяться для этого сертификата. Как правило, сборка цепочки будет успешно выполнена с повторными попытками.

Для пользователей NuGet симптомы этой проблемы связаны с тем, что операция NuGet обычно успешно выполняется при повторных попытках и любой из следующих вариантов:

  • NU3028 с сообщением,например "Цепочка сертификации обработана правильно, но завершена в корневом сертификате, который не является доверенным поставщиком доверия".
  • NU3037 с сообщением, например "Срок действия первичной подписи репозитория истек".

Примечание.

Этот параметр доступен начиная с NuGet 6.0.0.0 и применяется только к сбою, описанному выше в Windows. Параметр не применяется к любому другому сценарию и не влияет на Linux или macOS.

Перед пакетом SDK NuGet 6.8.0 и .NET 8 этот параметр отключен по умолчанию.

Начиная с NuGet 6.8.0 и пакета SDK для .NET 8, этот параметр включен по умолчанию в Windows. Переменная среды не должна быть задана явно, если вы не хотите переопределить значение 3,1000 по умолчанию или отказаться. Чтобы отказаться, задайте переменную среды со значением 0.

Вы можете включить экспериментальную, автоматическую попытку для недоверенных корневых сбоев в Windows, задав переменную среды с именем NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY со значением, состоящим из 2 положительных целых чисел с разделителями-запятыми, представляющих число повторных попыток и интервал сна в миллисекундах соответственно. Вы должны выбрать значения, которые являются разумными для вас.

Например, при задании переменной среды значение, аналогичное 3,1000 следующему:

set NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY=3,1000

... будет пытаться до 4 раз (начальная попытка плюс 3 повторных попыток) с 1 секундой (1000 мс) между каждой попыткой.