Подписи репозитория
Если источник пакета поддерживает добавление подписей репозитория в опубликованные пакеты, клиент может определить сертификаты подписи, используемые источником пакета. Этот ресурс позволяет клиентам определить, был ли подписанный репозиторий пакет изменен или имеет неожиданный сертификат подписи.
Ресурс, используемый для получения сведений о подписи репозитория, является ресурсомRepositorySignatures
, найденным в индексе службы.
Используется следующее @type
значение:
Значение @type | Примечания. |
---|---|
РепозиторийSignatures/4.7.0 | Начальный выпуск |
РепозиторийSignatures/4.9.0 | Поддерживается клиентами NuGet версии 4.9+ |
РепозиторийSignatures/5.0.0 | Разрешает включение allRepositorySigned . Поддерживается клиентами NuGet версии 5.0+ |
URL-адрес точки входа для следующих API — это значение @id
свойства, связанного с указанным выше упоминание значением ресурса@type
. В этом разделе используется URL-адрес {@id}
заполнителя.
Обратите внимание, {@id}
что в отличие от других ресурсов, URL-адрес должен обслуживаться по протоколу HTTPS.
Все URL-адреса, найденные в ресурсе подписей репозитория, поддерживают только методы GET
HTTP и HEAD
.
Индекс подписей репозитория содержит две части информации:
- Независимо от того, подписаны ли все пакеты, найденные в исходном источнике, подписаны этим источником пакета.
- Список сертификатов, используемых источником пакета для подписывания пакетов.
В большинстве случаев список сертификатов будет добавлен только в. Новые сертификаты будут добавлены в список, когда истек срок действия предыдущего сертификата подписи, и источник пакета должен начать использование нового сертификата подписи. Если сертификат удаляется из списка, это означает, что все подписи пакетов, созданные с помощью удаленного сертификата подписи, больше не должны считаться допустимыми клиентом. В этом случае подпись пакета (но не обязательно пакет) является недопустимой. Политика клиента может разрешить установку пакета как неподписанный.
В случае отзыва сертификата (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/5.0.0/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"
},
{
"fingerprints": {
"2.16.840.1.101.3.4.2.1": "1f4b311d9acc115c8dc8018b5a49e00fce6da8e2855f9f014ca6f34570bc482d"
},
"subject": "CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US",
"issuer": "CN=DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1, O=\"DigiCert, Inc.\", C=US",
"notBefore": "2024-02-23T00:00:00.0000000Z",
"notAfter": "2027-05-18T23:59:59.0000000Z",
"contentUrl": "https://api.nuget.org/v3-index/repository-signatures/certificates/1f4b311d9acc115c8dc8018b5a49e00fce6da8e2855f9f014ca6f34570bc482d.crt"
}
]
}