存储库签名
如果包源支持将存储库签名添加到已发布的包,则客户端可确定包源使用的签名证书。 此资源允许客户端检测存储库已签名包是否已被篡改或具有意外的签名证书。
用于提取此存储库签名信息的资源是在服务索引中找到的 RepositorySignatures
资源。
版本控制
使用以下 @type
值:
值@type | 说明 |
---|---|
RepositorySignatures/4.7.0 | 初始版本 |
RepositorySignatures/4.9.0 | NuGet v4.9 及以上版本客户端支持 |
RepositorySignatures/5.0.0 | 允许启用 allRepositorySigned 。 NuGet v5.0 及以上版本客户端支持 |
基 URL
以下 API 的入口点 URL 是与上述资源 @type
值关联的 @id
属性的值。 本主题使用占位符 URL {@id}
。
请注意,与其他资源不同,{@id}
URL 需通过 HTTPS 提供。
HTTP 方法
存储库签名中找到的所有 URL 均仅支持 HTTP 方法 GET
和 HEAD
。
存储库签名索引
存储库签名索引包含两条信息:
- 在源上找到的所有包是否均由此包源进行存储库签名。
- 包源用于对包进行签名的证书的列表。
大多数情况下,证书列表仅会向其进行追加。 当上一签名证书过期且包源需使用新的签名证书时,新证书将添加到此列表中。 如果从列表中删除某一证书,则意味着客户端不再认为使用已删除签名证书创建的所有包签名有效。 在此情况下,包签名(但未必是包)无效。 客户端策略可能允许将包以未签名状态进行安装。
对于证书吊销(例如密钥泄露),包源应对受影响证书所签名的所有包重新签名。 此外,包源应从签名证书列表中删除受影响的证书。
以下请求会提取存储库签名索引。
GET {@id}
存储库签名索引是一个 JSON 文档,其中包含具有以下属性的对象:
名称 | 类型 | 必须 | 说明 |
---|---|---|---|
allRepositorySigned | boolean | 是 | 必须为 4.7.0 和 4.9.0 资源上的 false |
signingCertificates | 对象数组 | 是 |
如果包源存在某些没有存储库签名的包,则会将 allRepositorySigned
布尔值设为 false。 如果将此布尔值设为 true,则源上提供的所有包均须具有由 signingCertificates
中所提及某一签名证书所生成的存储库签名。
警告
allRepositorySigned
布尔值在 4.7.0 和 4.9.0 资源上必须为 false。 NuGet v4.7、v4.8 和 v4.9 客户端无法从 allRepositorySigned
设为 true 的源安装包。
如果将 allRepositorySigned
布尔值设为 true,则 signingCertificates
数组中应存在一个或多个签名证书。 如果数组为空且将 allRepositorySigned
设为 true,则源中的所有包均应视为无效,尽管客户端策略仍可能允许使用包。 此数组中的每个元素均为具有以下属性的 JSON 对象。
名称 | 类型 | 必须 | 说明 |
---|---|---|---|
contentUrl | string | 是 | 采用 DER 编码的公共证书的绝对 URL |
指纹 | object | 是 | |
subject | 字符串 | 是 | 证书中的主题可分辨名称 |
颁发者 | string | 是 | 证书颁发者的可分辨名称 |
notBefore | string | 是 | 证书有效期的起始时间戳 |
notAfter | string | 是 | 证书有效期的终止时间戳 |
请注意,contentUrl
需通过 HTTPS 提供。 此 URL 没有特定 URL 模式,且必须使用此存储库签名索引文档动态发现。
此对象中的所有属性(contentUrl
除外)均须派生自在 contentUrl
中找到的证书。
这些派生属性旨在便于尽可能减少往返。
fingerprints
对象具有以下属性:
名称 | 类型 | 必须 | 说明 |
---|---|---|---|
2.16.840.1.101.3.4.2.1 | string | 是 | SHA-256 指纹 |
密钥名称 2.16.840.1.101.3.4.2.1
为 SHA-256 哈希算法的 OID。
所有哈希值均须为采用十六进制编码的哈希摘要的小写字符串表示形式。
示例请求
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"
}
]
}