Repository-Signaturen

Wenn eine Paketquelle das Hinzufügen von Repositorysignaturen zu veröffentlichten Paketen unterstützt, ist es möglich, dass ein Client die Signaturzertifikate bestimmt, die von der Paketquelle verwendet werden. Mit dieser Ressource können Clients erkennen, ob ein signiertes Repositorypaket manipuliert wurde oder über ein unerwartetes Signaturzertifikat verfügt.

Die Ressource, die zum Abrufen dieser Repositorysignaturinformationen verwendet wird, ist die Ressource, die RepositorySignaturesim Dienstindex gefunden wird.

Versionsverwaltung

Der folgende @type Wert wird verwendet:

Wert vom Typ @type Hinweise
RepositorySignatures/4.7.0 Erstrelease
RepositorySignatures/4.9.0 Unterstützt von NuGet v4.9+-Clients
RepositorySignatures/5.0.0 Ermöglicht das Aktivieren allRepositorySignedvon . Unterstützt von NuGet v5.0+-Clients

Basis-URL

Die Basis-URL für die folgenden APIs ist der Wert der @id-Eigenschaft, die einem der oben genannten @type-Ressourcenwerte zugeordnet ist. In diesem Thema wird die Platzhalter-URL {@id}verwendet.

Beachten Sie, dass im Gegensatz zu anderen Ressourcen die {@id} URL über HTTPS bereitgestellt werden muss.

HTTP-Methoden

Alle URLs, die in der Repositorysignaturressource gefunden wurden, unterstützen nur die HTTP-Methoden GET und HEAD.

Repositorysignaturindex

Der Repositorysignaturindex enthält zwei Informationen:

  1. Gibt an, ob alle in der Quelle gefundenen Pakete von dieser Paketquelle signiert sind.
  2. Die Liste der Zertifikate, die von der Paketquelle zum Signieren von Paketen verwendet werden.

In den meisten Fällen wird die Liste der Zertifikate nur angefügt. Neue Zertifikate würden der Liste hinzugefügt, wenn das vorherige Signaturzertifikat abgelaufen ist und die Paketquelle mit der Verwendung eines neuen Signaturzertifikats beginnen muss. Wenn ein Zertifikat aus der Liste entfernt wird, bedeutet dies, dass alle paketsignierten Signaturen, die mit dem entfernten Signaturzertifikat erstellt wurden, nicht mehr als gültig vom Client betrachtet werden sollten. In diesem Fall ist die Paketsignatur (aber nicht unbedingt das Paket) ungültig. Eine Clientrichtlinie kann die Installation des Pakets als nicht signiert zulassen.

Bei zertifikatssperrendem Zertifikat (z. B. Schlüsselkompromittierung) wird erwartet, dass die Paketquelle alle Vom betroffenen Zertifikat signierten Pakete erneut signieren wird. Darüber hinaus sollte die Paketquelle das betroffene Zertifikat aus der Signaturzertifikatliste entfernen.

Die folgende Anforderung ruft den Repositorysignaturindex ab.

GET {@id}

Der Repositorysignaturindex ist ein JSON-Dokument, das ein Objekt mit den folgenden Eigenschaften enthält:

Name Type Erforderlich Hinweise
allRepositorySigned boolean ja false Muss die Ressourcen 4.7.0 und 4.9.0 sein
signingCertificates Array von Objekten ja

Der allRepositorySigned boole'sche Wert ist auf "false" festgelegt, wenn die Paketquelle über einige Pakete verfügt, die keine Repositorysignatur aufweisen. Wenn der boole'sche Wert auf "true" festgelegt ist, müssen alle in der Quelle verfügbaren Pakete über eine Repositorysignatur verfügen, die von einem der Signaturzertifikate erstellt Erwähnung.signingCertificates

Warnung

Der allRepositorySigned boole'sche Wert muss für die Ressourcen 4.7.0 und 4.9.0 false sein. NuGet v4.7-, v4.8- und v4.9-Clients können keine Pakete aus Quellen installieren, die auf "true" festgelegt sind allRepositorySigned .

Es sollte mindestens ein Signaturzertifikat im signingCertificates Array vorhanden sein, wenn der allRepositorySigned boole'sche Wert auf "true" festgelegt ist. Wenn das Array leer ist und allRepositorySigned auf "true" festgelegt ist, sollten alle Pakete aus der Quelle als ungültig betrachtet werden, obwohl eine Clientrichtlinie den Verbrauch von Paketen weiterhin zulassen kann. Jedes Arrayelement ist ein JSON-Objekt mit den folgenden Zeichenfolgeneigenschaften.

Name Type Erforderlich Hinweise
contentUrl Zeichenfolge ja Absolute URL zum der der-codierten öffentlichen Zertifikat
Fingerabdrücke Objekt ja
Antragsteller Zeichenfolge ja Der definierte Name für den Antragsteller aus dem Zertifikat
Aussteller Zeichenfolge ja Definierter Name des Zertifikatausstellers
notBefore Zeichenfolge ja Der Startzeitstempel des Gültigkeitszeitraums des Zertifikats
notAfter Zeichenfolge ja Der Endzeitstempel des Gültigkeitszeitraums des Zertifikats

Beachten Sie, dass dies contentUrl erforderlich ist, um über HTTPS bereitgestellt zu werden. Diese URL weist kein bestimmtes URL-Muster auf und muss mithilfe dieses Repositorysignaturindexdokuments dynamisch ermittelt werden.

Alle Eigenschaften in diesem Objekt (abgesehen von contentUrl) müssen vom Zertifikat abgeleitet werden können, das unter contentUrl. Diese ableitenden Eigenschaften werden als Komfort bereitgestellt, um Roundtrips zu minimieren.

Das fingerprints-Objekt weist die folgenden Eigenschaften auf:

Name Type Erforderlich Hinweise
2.16.840.1.101.3.4.2.1 Zeichenfolge ja Der SHA-256-Fingerabdruck

Der Schlüsselname 2.16.840.1.101.3.4.2.1 ist das OID des SHA-256-Hashalgorithmus.

Alle Hashwerte müssen kleingeschrieben sein, hexadekodierte Zeichenfolgendarstellungen des Hashdigests.

Beispielanforderung

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

Beispielantwort

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