Подписи репозитория

Если источник пакета поддерживает добавление подписей репозитория в опубликованные пакеты, клиент может определить сертификаты подписи, используемые источником пакета. Этот ресурс позволяет клиентам определить, был ли подписанный репозиторий пакет изменен или имеет неожиданный сертификат подписи.

Ресурс, используемый для получения сведений о подписи репозитория, является ресурсомRepositorySignatures, найденным в индексе службы.

Управление версиями

Используется следующее @type значение:

Значение @type Примечания.
РепозиторийSignatures/4.7.0 Начальный выпуск
РепозиторийSignatures/4.9.0 Поддерживается клиентами NuGet версии 4.9+
РепозиторийSignatures/5.0.0 Разрешает включение allRepositorySigned. Поддерживается клиентами NuGet версии 5.0+

Базовый URL-адрес

URL-адрес точки входа для следующих API — это значение @id свойства, связанного с указанным выше упоминание значением ресурса@type. В этом разделе используется URL-адрес {@id}заполнителя.

Обратите внимание, {@id} что в отличие от других ресурсов, URL-адрес должен обслуживаться по протоколу HTTPS.

Методы HTTP

Все URL-адреса, найденные в ресурсе подписей репозитория, поддерживают только методы GET HTTP и HEAD.

Индекс подписей репозитория

Индекс подписей репозитория содержит две части информации:

  1. Независимо от того, подписаны ли все пакеты, найденные в исходном источнике, подписаны этим источником пакета.
  2. Список сертификатов, используемых источником пакета для подписывания пакетов.

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

В случае отзыва сертификата (e.g. key компрометации), источник пакета, как ожидается, повторно подписывает все пакеты, подписанные затронутым сертификатом. Кроме того, источник пакета должен удалить затронутый сертификат из списка сертификатов подписи.

Следующий запрос получает индекс подписей репозитория.

GET {@id}

Индекс подписи репозитория — это документ JSON, содержащий объект со следующими свойствами:

Имя. Type Обязательное поле Примечания.
allRepositorySigned boolean yes Должно быть на false ресурсах 4.7.0 и 4.9.0
подписьCertificates массив объектов yes

allRepositorySigned Логическое значение имеет значение false, если источник пакета содержит некоторые пакеты, у которых нет подписи репозитория. Если логическое значение имеет значение true, все пакеты, доступные в источнике, должны иметь подпись репозитория, созданную одним из сертификатов подписи, упоминание вsigningCertificates.

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

allRepositorySigned Логическое значение должно иметь значение false для ресурсов 4.7.0 и 4.9.0. Клиенты NuGet версии 4.7, версии 4.8 и версии 4.9 не могут устанавливать пакеты из источников, для которых allRepositorySigned задано значение true.

В массиве должно быть одно или несколько сертификатов signingCertificates подписи, если allRepositorySigned логическое значение имеет значение true. Если массив пуст и allRepositorySigned имеет значение true, все пакеты из источника должны считаться недопустимыми, хотя политика клиента может по-прежнему разрешать потребление пакетов. Каждый элемент в этом массиве представляет собой объект JSON со следующими свойствами.

Имя. Type Обязательное поле Примечания.
contentUrl строка yes Абсолютный URL-адрес общедоступного сертификата в кодировке DER
Отпечатки пальцев объект yes
субъект строка yes Различающееся имя субъекта от сертификата
Издатель строка yes Различающееся имя издателя сертификата
notBefore строка yes Начальная метка времени срока действия сертификата
notAfter строка yes Метка времени окончания срока действия сертификата

Обратите внимание, что contentUrl необходимо обслуживать по протоколу HTTPS. Этот URL-адрес не имеет определенного шаблона URL-адреса и должен быть динамически обнаружен с помощью этого документа индекса сигнатур репозитория.

Все свойства этого объекта (помимо contentUrl) должны быть производными от сертификата, найденного по contentUrlадресу. Эти производные свойства предоставляются в качестве удобства, чтобы свести к минимуму круглые пути.

Объект fingerprints имеет следующие свойства.

Имя. Type Обязательное поле Примечания.
2.16.840.1.101.3.4.2.1 строка yes Отпечаток SHA-256

Имя 2.16.840.1.101.3.4.2.1 ключа — это OID алгоритма хэша SHA-256.

Все хэш-значения должны быть строчными, шестнадцатеричными строковыми представлениями хэш-дайджеста.

Образец запроса

GET https://api.nuget.org/v3-index/repository-signatures/index.json

Пример ответа

{
  "allRepositorySigned": true,
  "signingCertificates": [
    {
      "fingerprints": {
        "2.16.840.1.101.3.4.2.1": "0e5f38f57dc1bcc806d8494f4f90fbcedd988b46760709cbeec6f4219aa6157d"
      },
      "subject": "CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US",
      "issuer": "CN=DigiCert SHA2 Assured ID Code Signing CA, OU=www.digicert.com, O=DigiCert Inc, C=US",
      "notBefore": "2018-04-10T00:00:00.0000000Z",
      "notAfter": "2021-04-14T12:00:00.0000000Z",
      "contentUrl": "https://api.nuget.org/v3-index/repository-signatures/certificates/0e5f38f57dc1bcc806d8494f4f90fbcedd988b46760709cbeec6f4219aa6157d.crt"
    },
    {
      "fingerprints": {
        "2.16.840.1.101.3.4.2.1": "5a2901d6ada3d18260b9c6dfe2133c95d74b9eef6ae0e5dc334c8454d1477df4"
      },
      "subject": "CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US",
      "issuer": "CN=DigiCert SHA2 Assured ID Code Signing CA, OU=www.digicert.com, O=DigiCert Inc, C=US",
      "notBefore": "2021-02-16T00:00:00.0000000Z",
      "notAfter": "2024-05-15T23:59:59.0000000Z",
      "contentUrl": "https://api.nuget.org/v3-index/repository-signatures/certificates/5a2901d6ada3d18260b9c6dfe2133c95d74b9eef6ae0e5dc334c8454d1477df4.crt"
    }
  ]
}