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

NuGet 4.6.0 и Visual Studio 2017 версии 15.6 и более поздних версий

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

Подписанные пакеты обеспечивают самую надежную сквозную проверку. Существует два разных типа подписей NuGet:

  • Подпись автора. Подпись автора гарантирует, что пакет не был изменен после того, как автор подписал пакет, независимо от того, какой репозиторий или какой метод транспорта доставлен. Кроме того, подписанные автором пакеты предоставляют дополнительный механизм проверки подлинности в конвейере публикации nuget.org, так как сертификат подписи должен быть зарегистрирован заранее. Дополнительные сведения см. в разделе "Регистрация сертификатов".
  • Подпись репозитория. Сигнатуры репозитория обеспечивают целостность для всех пакетов в репозитории, подписанных или нет, даже если эти пакеты получены из другого расположения, отличного от исходного репозитория, в котором они были подписаны.

Дополнительные сведения о создании подписанного пакета см. в статье "Подписывание пакетов " и команды подписи nuget. Сигнатуры пакетов можно проверить с помощью команд dotnet nuget илиnuget .

Внимание

Пакеты подписывания авторов поддерживаются только nuget.exe в Windows в настоящее время. Однако все пакеты, отправленные в nuget.org, автоматически подписаны репозиторием.

Требования к сертификатам

Для подписывания пакета требуется сертификат подписи кода, который является специальным типом сертификата, допустимого для id-kp-codeSigning цели [RFC 5280 раздела 4.2.1.12]. Кроме того, сертификат должен иметь длину открытого ключа RSA в 2048 битах или выше.

Требования к метке времени

Подписанные пакеты должны включать метку времени RFC 3161, чтобы гарантировать срок действия подписи после срока действия сертификата подписи пакета. Сертификат, используемый для подписи метки времени, должен быть допустимым для id-kp-timeStamping цели [RFC 5280 раздела 4.2.1.12]. Кроме того, сертификат должен иметь длину открытого ключа RSA в 2048 битах или выше.

Дополнительные технические сведения можно найти в технических спецификациях подписи пакета (GitHub).

Требования к подписи для NuGet.org

nuget.org имеет дополнительные требования к принятию подписанного пакета:

  • Основная подпись должна быть подписью автора.
  • Основная подпись должна иметь одну допустимую метку времени.
  • Сертификаты X.509 для подписи автора и подписи метки времени:
    • Должен иметь открытый ключ RSA 2048 бит или больше.
    • Должен находиться в течение текущего времени в формате UTC во время проверки пакета на nuget.org.
    • Должен быть связан с доверенным корневым центром, доверенным по умолчанию в Windows. Пакеты, подписанные с помощью самозадаемых сертификатов, отклоняются.
    • Должен быть допустимым для своей цели:
      • Сертификат подписи автора должен быть допустимым для подписи кода.
      • Сертификат метки времени должен быть допустимым для метки времени.
    • Не должно быть отменено во время подписания. (Это может быть неизвестно во время отправки, поэтому nuget.org периодически повторно проверка возвращает состояние отзыва.