Condividi tramite


Firme di repository

Se un'origine del pacchetto supporta l'aggiunta di firme del repository ai pacchetti pubblicati, è possibile che un client determini i certificati di firma usati dall'origine del pacchetto. Questa risorsa consente ai client di rilevare se un pacchetto firmato dal repository è stato manomesso o ha un certificato di firma imprevisto.

La risorsa usata per recuperare queste informazioni sulla firma del repository è la RepositorySignatures risorsa presente nell'indice del servizio.

Controllo delle versioni

Viene usato il valore seguente @type :

Valore @type Note
RepositorySignatures/4.7.0 Versione iniziale
RepositorySignatures/4.9.0 Supportato dai client NuGet v4.9+
RepositorySignatures/5.0.0 Consente di abilitare allRepositorySigned. Supportato dai client NuGet v5.0+

URL di base

L'URL del punto di ingresso per le API seguenti è il valore della @id proprietà associata al valore della risorsa indicato in precedenza @type . In questo argomento viene usato l'URL {@id}segnaposto .

Si noti che, a differenza di altre risorse, l'URL {@id} deve essere servito tramite HTTPS.

Metodi HTTP

Tutti gli URL trovati nella risorsa delle firme del repository supportano solo i metodi GET HTTP e HEAD.

Indice delle firme del repository

L'indice delle firme del repository contiene due informazioni:

  1. Indica se tutti i pacchetti trovati nell'origine sono firmati dall'origine del pacchetto.
  2. Elenco di certificati usati dall'origine del pacchetto per firmare i pacchetti.

Nella maggior parte dei casi, l'elenco dei certificati verrà aggiunto solo a . I nuovi certificati verranno aggiunti all'elenco quando il certificato di firma precedente è scaduto e l'origine del pacchetto deve iniziare a usare un nuovo certificato di firma. Se un certificato viene rimosso dall'elenco, significa che tutte le firme di pacchetto create con il certificato di firma rimosso non devono più essere considerate valide dal client. In questo caso, la firma del pacchetto (ma non necessariamente il pacchetto) non è valida. Un criterio client può consentire l'installazione del pacchetto come non firmato.

In caso di revoca dei certificati (e.g. key compromissione), l'origine del pacchetto dovrebbe firmare nuovamente tutti i pacchetti firmati dal certificato interessato. Inoltre, l'origine del pacchetto deve rimuovere il certificato interessato dall'elenco dei certificati di firma.

La richiesta seguente recupera l'indice delle firme del repository.

GET {@id}

L'indice della firma del repository è un documento JSON che contiene un oggetto con le proprietà seguenti:

Nome Digita Obbligatorio Note
allRepositorySigned boolean yes Deve essere false nelle risorse 4.7.0 e 4.9.0
signingCertificates matrice di oggetti yes

Il allRepositorySigned valore booleano è impostato su false se l'origine del pacchetto include alcuni pacchetti che non dispongono di firma del repository. Se il valore booleano è impostato su true, tutti i pacchetti disponibili nell'origine devono avere una firma del repository prodotta da uno dei certificati di firma indicati in signingCertificates.

Avviso

Il allRepositorySigned valore booleano deve essere false nelle risorse 4.7.0 e 4.9.0. I client NuGet v4.7, v4.8 e v4.9 non possono installare pacchetti da origini impostate allRepositorySigned su true.

Se il allRepositorySigned valore booleano è impostato su true, devono essere presenti uno o più certificati signingCertificates di firma nella matrice. Se la matrice è vuota ed allRepositorySigned è impostata su true, tutti i pacchetti dell'origine devono essere considerati non validi, anche se un criterio client può comunque consentire l'utilizzo dei pacchetti. Ogni elemento in questa matrice è un oggetto JSON con le proprietà seguenti.

Nome Digita Obbligatorio Note
contentUrl string yes URL assoluto del certificato pubblico con codifica DER
Impronte digitali oggetto yes
subject string yes Nome distinto dell'oggetto dal certificato
Autorità di certificazione string yes Nome distinto dell'emittente del certificato
notBefore string yes Timestamp iniziale del periodo di validità del certificato
notAfter string yes Timestamp finale del periodo di validità del certificato

Si noti che l'oggetto contentUrl deve essere gestito tramite HTTPS. Questo URL non ha un modello URL specifico e deve essere individuato in modo dinamico usando questo documento di indice delle firme del repository.

Tutte le proprietà in questo oggetto (a parte contentUrl) devono essere derivate dal certificato trovato in contentUrl. Queste proprietà derivabili vengono fornite per praticità per ridurre al minimo i round trip.

Di seguito sono elencate le proprietà dell'oggetto fingerprints:

Nome Digita Obbligatorio Note
2.16.840.1.101.3.4.2.1 string yes Impronta digitale SHA-256

Il nome 2.16.840.1.101.3.4.2.1 della chiave è l'OID dell'algoritmo hash SHA-256.

Tutti i valori hash devono essere rappresentazioni di stringa con codifica esadecimale minuscole del digest hash.

Esempio di richiesta

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

Risposta di esempio

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