Tanda tangan repositori
Jika sumber paket mendukung penambahan tanda tangan repositori ke paket yang diterbitkan, klien dapat menentukan sertifikat penandatanganan yang digunakan oleh sumber paket. Sumber daya ini memungkinkan klien mendeteksi apakah paket yang ditandatangani repositori telah dirusak atau memiliki sertifikat penandatanganan yang tidak terduga.
Sumber daya yang digunakan untuk mengambil informasi tanda tangan repositori ini adalah sumber daya yang RepositorySignatures
ditemukan dalam indeks layanan.
Penerapan versi
Nilai berikut @type
digunakan:
@type nilai | Catatan |
---|---|
RepositoriSignatures/4.7.0 | Rilis awal |
RepositoriSignatures/4.9.0 | Didukung oleh klien NuGet v4.9+ |
RepositoriSignatures/5.0.0 | Memungkinkan mengaktifkan allRepositorySigned . Didukung oleh klien NuGet v5.0+ |
URL Dasar
URL titik masuk untuk API berikut adalah nilai properti yang @id
terkait dengan nilai sumber daya @type
yang disebutkan di atas. Topik ini menggunakan URL {@id}
tempat penampung .
Perhatikan bahwa tidak seperti sumber daya lain, {@id}
URL harus dilayani melalui HTTPS.
Metode HTTP
Semua URL yang ditemukan di sumber daya tanda tangan repositori hanya mendukung metode GET
HTTP dan HEAD
.
Indeks tanda tangan repositori
Indeks tanda tangan repositori berisi dua informasi:
- Apakah semua paket yang ditemukan pada sumber ditandatangani oleh sumber paket ini atau tidak.
- Daftar sertifikat yang digunakan oleh sumber paket untuk menandatangani paket.
Dalam kebanyakan kasus, daftar sertifikat hanya akan ditambahkan. Sertifikat baru akan ditambahkan ke daftar ketika sertifikat penandatanganan sebelumnya telah kedaluwarsa dan sumber paket perlu mulai menggunakan sertifikat penandatanganan baru. Jika sertifikat dihapus dari daftar, itu berarti bahwa semua tanda tangan paket yang dibuat dengan sertifikat penandatanganan yang dihapus tidak boleh lagi dianggap valid oleh klien. Dalam hal ini, tanda tangan paket (tetapi belum tentu paket) tidak valid. Kebijakan klien dapat mengizinkan penginstalan paket sebagai tidak ditandatangani.
Dalam kasus pencabutan sertifikat (e.g. key penyusupan), sumber paket diharapkan untuk menandatangani kembali semua paket yang ditandatangani oleh sertifikat yang terpengaruh. Selain itu, sumber paket harus menghapus sertifikat yang terpengaruh dari daftar sertifikat penandatanganan.
Permintaan berikut mengambil indeks tanda tangan repositori.
GET {@id}
Indeks tanda tangan repositori adalah dokumen JSON yang berisi objek dengan properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
allRepositorySigned | Boolean | yes | Harus berada false di sumber daya 4.7.0 dan 4.9.0 |
signingCertificates | array objek | yes |
allRepositorySigned
Boolean diatur ke false jika sumber paket memiliki beberapa paket yang tidak memiliki tanda tangan repositori. Jika boolean diatur ke true, semua paket yang tersedia di sumber harus memiliki tanda tangan repositori yang dihasilkan oleh salah satu sertifikat penandatanganan yang disebutkan dalam signingCertificates
.
Peringatan
Boolean allRepositorySigned
harus salah pada sumber daya 4.7.0 dan 4.9.0. Klien NuGet v4.7, v4.8, dan v4.9 tidak dapat menginstal paket dari sumber yang telah allRepositorySigned
diatur ke true.
Harus ada satu atau beberapa sertifikat penandatanganan dalam signingCertificates
array jika allRepositorySigned
boolean diatur ke true. Jika array kosong dan allRepositorySigned
diatur ke true, semua paket dari sumber harus dianggap tidak valid, meskipun kebijakan klien mungkin masih mengizinkan konsumsi paket. Setiap elemen dalam array ini adalah objek JSON dengan properti berikut.
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
contentUrl | string | yes | URL absolut ke sertifikat publik yang dikodekan DER |
Sidik jari | object | yes | |
subjek | string | yes | Nama khusus subjek dari sertifikat |
penerbit | string | yes | Nama khusus penerbit sertifikat |
notBefore | string | yes | Tanda waktu awal periode validitas sertifikat |
notAfter | string | yes | Tanda waktu akhir periode validitas sertifikat |
Perhatikan bahwa contentUrl
diperlukan untuk disajikan melalui HTTPS. URL ini tidak memiliki pola URL tertentu dan harus ditemukan secara dinamis menggunakan dokumen indeks tanda tangan repositori ini.
Semua properti dalam objek ini (selain dari contentUrl
) harus dapat diturunkan dari sertifikat yang ditemukan di contentUrl
.
Properti turunan ini disediakan sebagai kemudahan untuk meminimalkan perjalanan pulang pergi.
Objek fingerprints
memiliki properti berikut:
Nama | Tipe | Diperlukan | Catatan |
---|---|---|---|
2.16.840.1.101.3.4.2.1 | string | yes | Sidik jari SHA-256 |
Nama 2.16.840.1.101.3.4.2.1
kunci adalah OID dari algoritma hash SHA-256.
Semua nilai hash harus huruf kecil, representasi string yang dikodekan hex dari hash digest.
Permintaan sampel
GET https://api.nuget.org/v3-index/repository-signatures/5.0.0/index.json
Respon sampel
{
"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"
}
]
}