Bagikan melalui


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 RepositorySignaturesditemukan 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:

  1. Apakah semua paket yang ditemukan pada sumber ditandatangani oleh sumber paket ini atau tidak.
  2. 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"
    }
  ]
}