存放庫簽章
如果封裝來源支援將存放庫簽章新增至已發佈的套件,用戶端就有可能判斷封裝來源所使用的簽署憑證。 此資源可讓用戶端偵測存放庫簽署的套件是否已遭到竄改,或是否有非預期的簽署憑證。
用來擷取此存放庫簽章資訊的資源是在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 是 @id
與上述資源 @type
值相關聯的屬性值。 本主題使用佔位元 URL {@id}
。
請注意,不同於其他資源, {@id}
必須透過 HTTPS 提供 URL。
HTTP 方法
存放庫簽章資源中找到的所有網址只支援 HTTP 方法與 GET
HEAD
。
存放庫簽章索引
存放庫簽章索引包含兩項資訊:
- 在來源上找到的所有套件是否都是此套件來源所簽署的存放庫。
- 封裝來源用來簽署封裝的憑證清單。
在大部分情況下,只會附加憑證清單。 當先前的簽署憑證過期,且套件來源需要使用新的簽署憑證時,新的憑證會新增至清單。 如果已從清單中移除憑證,這表示用戶端不應再將以移除的簽署憑證建立的所有套件簽章視為有效。 在此情況下,套件簽章(但不一定是套件)無效。 客戶端原則可能會允許將套件安裝為未簽署。
如果憑證撤銷(e.g. key遭入侵),套件來源預期會重新簽署受影響憑證所簽署的所有套件。 此外,套件來源應該從簽署憑證清單中移除受影響的憑證。
下列要求會擷取存放庫簽章索引。
GET {@id}
存放庫簽章索引是 JSON 檔,其中包含具有下列屬性的物件:
名稱 | 類型 | 必要 | 備註 |
---|---|---|---|
allRepositorySigned | boolean | 是 | 必須是 false 4.7.0 和 4.9.0 資源 |
signingCertificates | 物件陣列 | 是 |
allRepositorySigned
如果套件來源有一些沒有存放庫簽章的套件,布爾值會設定為 false。 如果布爾值設定為 true,來源上所有可用的套件都必須有一個存放庫簽章,由 中 signingCertificates
提及的其中一個簽署憑證所產生。
警告
布爾 allRepositorySigned
值在 4.7.0 和 4.9.0 資源上必須是 false。 NuGet v4.7、v4.8 和 v4.9 客戶端無法從已 allRepositorySigned
設定為 true 的來源安裝套件。
如果布爾值設定為 true,allRepositorySigned
陣列中signingCertificates
應該有一或多個簽署憑證。 如果數位是空的,而且 allRepositorySigned
設定為 true,則來源中的所有套件都應該視為無效,不過客戶端原則可能仍允許取用套件。 此陣列中的每個元素都是具有下列屬性的 JSON 物件。
名稱 | 類型 | 必要 | 備註 |
---|---|---|---|
contentUrl | string | 是 | DER 編碼公用憑證的絕對 URL |
指紋 | object | 是 | |
主旨 | string | 是 | 主體辨別名稱與憑證 |
issuer | 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"
}
]
}