Sdílet prostřednictvím


Podpisy úložiště

Pokud zdroj balíčku podporuje přidávání podpisů úložiště do publikovaných balíčků, může klient určit podpisové certifikáty používané zdrojem balíčku. Tento prostředek umožňuje klientům zjistit, jestli se zfalšoval podepsaný balíček úložiště nebo jestli má neočekávaný podpisový certifikát.

Prostředek použitý k načtení informací o podpisu úložiště je RepositorySignatures prostředek, který se nachází v indexu služby.

Vytváření verzí

Použije se následující @type hodnota:

@type Hodnotu Notes
RepositorySignatures/4.7.0 Počáteční verze
RepositorySignatures/4.9.0 Podporováno klienty NuGet verze 4.9 nebo novějšími
RepositorySignatures/5.0.0 Povolí povolení allRepositorySigned. Podporováno klienty NuGet v5.0+

Základní adresa URL

Adresa URL vstupního @id bodu pro následující rozhraní API je hodnota vlastnosti přidružené k výše uvedené hodnotě prostředku @type . Toto téma používá zástupnou adresu URL {@id}.

Všimněte si, {@id} že na rozdíl od jiných prostředků se adresa URL musí obsluhovat přes PROTOKOL HTTPS.

Metody HTTP

Všechny adresy URL nalezené v prostředku podpisů úložiště podporují pouze metody GET HTTP a HEAD.

Index podpisů úložiště

Index podpisů úložiště obsahuje dva údaje:

  1. Zda jsou všechny balíčky nalezené ve zdroji úložiště podepsané tímto zdrojem balíčku.
  2. Seznam certifikátů používaných zdrojem balíčku k podepisování balíčků.

Ve většině případů se k seznamu certifikátů připojí jenom někdy. Nové certifikáty se při vypršení platnosti předchozího podpisového certifikátu přidají do seznamu a zdroj balíčku musí začít používat nový podpisový certifikát. Pokud se certifikát odebere ze seznamu, znamená to, že klient by už neměl považovat všechny podpisy balíčků vytvořené s odebraným podpisovým certifikátem za platné. V tomto případě je podpis balíčku (ale nemusí nutně být balíček) neplatný. Zásady klienta můžou umožňovat instalaci balíčku jako nepodepsaného.

V případě odvolání certifikátu (e.g. key ohrožení zabezpečení) se očekává, že zdroj balíčku znovu podepíše všechny balíčky podepsané ovlivněným certifikátem. Kromě toho by měl zdroj balíčku odebrat ovlivněný certifikát ze seznamu podpisových certifikátů.

Následující požadavek načte index podpisů úložiště.

GET {@id}

Index podpisu úložiště je dokument JSON, který obsahuje objekt s následujícími vlastnostmi:

Name Type Požaduje se Notes
allRepositorySigned boolean ano Musí být false ve verzi 4.7.0 a 4.9.0 zdroje.
signingCertificates pole objektů ano

allRepositorySigned Logická hodnota je nastavená na false, pokud zdroj balíčku obsahuje některé balíčky, které nemají podpis úložiště. Pokud je logická hodnota nastavena na hodnotu true, všechny balíčky dostupné ve zdroji musí mít podpis úložiště vytvořený jedním z podpisových certifikátů uvedených v signingCertificates.

Upozorňující

allRepositorySigned Logická hodnota musí být v prostředcích 4.7.0 a 4.9.0 false. Klienti NuGet v4.7, v4.8 a v4.9 nemohou instalovat balíčky ze zdrojů, které jsou nastaveny allRepositorySigned na true.

Pokud je logická hodnota nastavená na true, měl by v signingCertificates poli allRepositorySigned existovat jeden nebo více podpisových certifikátů. Pokud je pole prázdné a allRepositorySigned je nastaveno na true, všechny balíčky ze zdroje by měly být považovány za neplatné, i když zásady klienta můžou stále umožňovat spotřebu balíčků. Každý prvek v tomto poli je objekt JSON s následujícími vlastnostmi.

Name Type Požaduje se Notes
contentUrl string ano Absolutní adresa URL veřejného certifikátu s kódováním DER
Otisky prstů objekt ano
subject string ano Rozlišující název subjektu od certifikátu
issuer string ano Rozlišující název vystavitele certifikátu
notBefore string ano Počáteční časové razítko doby platnosti certifikátu
notAfter string ano Koncové časové razítko doby platnosti certifikátu

Mějte na paměti, že se vyžaduje obsluha contentUrl přes PROTOKOL HTTPS. Tato adresa URL nemá žádný konkrétní vzor adresy URL a musí být dynamicky zjištěna pomocí tohoto dokumentu indexu podpisů úložiště.

Všechny vlastnosti v tomto objektu (kromě contentUrl) musí být odvozeny z certifikátu nalezeného na contentUrladrese . Tyto odvozené vlastnosti jsou poskytovány jako pohodlí pro minimalizaci odezvy.

Objekt fingerprints má následující vlastnosti:

Name Type Požaduje se Notes
2.16.840.1.101.3.4.2.1 string ano Otisk prstu SHA-256

Název 2.16.840.1.101.3.4.2.1 klíče je identifikátor hash algoritmu SHA-256.

Všechny hodnoty hash musí být malé a šestnáctkové řetězcové reprezentace hodnoty hash hash.

Ukázkový požadavek

GET https://api.nuget.org/v3-index/repository-signatures/5.0.0/index.json

Ukázková odpověď

{
  "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"
    }
  ]
}