リポジトリの署名

パッケージ ソースが公開済みパッケージへのリポジトリ署名の追加をサポートしている場合、クライアントはパッケージ ソースによって使用される署名証明書を特定できます。 このリソースを使用すると、クライアントは、リポジトリ署名済みパッケージに改ざんがあったかどうか、予期しない署名証明書があるかどうかを検出できます。

このリポジトリ署名情報のフェッチに使用されるリソースは、サービス インデックス内にある RepositorySignatures リソースです。

バージョン管理

次の @type 値が使用されます。

@type 値 メモ
RepositorySignatures/4.7.0 初期リリース
RepositorySignatures/4.9.0 NuGet v4.9 以降のクライアントでサポートされています
RepositorySignatures/5.0.0 allRepositorySigned を有効にすることを許可します。 NuGet v5.0 以降のクライアントでサポートされています

ベース URL

次の API のエントリ ポイント URL は、前述のリソースの @type 値に関連付けられている @id プロパティの値です。 このトピックでは、プレースホルダー URL {@id} を使用します。

他のリソースとは異なり、{@id} URL は HTTPS 経由で提供する必要があることに注意してください。

HTTP メソッド

リポジトリ署名リソースにあるすべての URL では、HTTP メソッド GET および HEAD がサポートされています。

リポジトリ署名インデックス

リポジトリ署名インデックスには、次の 2 つの情報が含まれています。

  1. ソースにあるすべてのパッケージがこのパッケージ ソースによって署名されたリポジトリであるかどうか。
  2. パッケージ ソースがパッケージに署名するために使用する証明書のリスト。

ほとんどの場合、証明書のリストには追加されるだけです。 以前の署名証明書の有効期限が切れ、パッケージ ソースが新しい署名証明書の使用を開始する必要がある場合は、新しい証明書がリストに追加されます。 証明書がリストから削除された場合、削除された署名証明書で作成されたすべてのパッケージの署名は、クライアントによって有効と見なされなくなります。 この場合、パッケージの署名は無効です (ただし、パッケージは無効とは限りません)。 クライアント ポリシーでは、署名されていないパッケージのインストールが許可される場合があります。

証明書失効 (鍵漏えいなど) の場合、パッケージ ソースは、影響を受ける証明書によって署名されたすべてのパッケージに再署名することが期待されます。 さらに、パッケージ ソースは、署名証明書のリストから影響を受ける証明書を削除する必要があります。

次の要求は、リポジトリ署名インデックスをフェッチします。

GET {@id}

リポジトリ署名インデックスは、次のプロパティを持つオブジェクトを含む JSON ドキュメントです。

名前 タイプ 必須 メモ
allRepositorySigned boolean はい 4.7.0 および 4.9.0 リソースでは、false である必要があります
signingCertificate オブジェクトの配列 はい

パッケージ ソースにリポジトリ署名のないパッケージがある場合、allRepositorySigned ブール値は false に設定されます。 ブール値が true に設定されている場合、ソースで使用可能なすべてのパッケージには、signingCertificates に記載されている署名証明書の 1 つによって生成されたリポジトリ署名が必要です。

警告

allRepositorySigned ブール値は、4.7.0 および 4.9.0 リソースでは false である必要があります。 NuGet v4.7、v4.8、および v4.9 クライアントは、allRepositorySigned が true に設定されているソースからパッケージをインストールできません。

allRepositorySigned ブール値が true に設定されている場合は、signingCertificates 配列に 1 つまたは複数の署名証明書が存在する必要があります。 配列が空で allRepositorySigned が true に設定されている場合、クライアント ポリシーでパッケージの使用が許可されている可能性はありますが、ソースからのすべてのパッケージを無効と見なす必要があります。 この配列の各要素は、次のプロパティを持つ JSON オブジェクトです。

名前 タイプ 必須 メモ
contentUrl string はい DER でエンコードされたパブリック証明書の絶対 URL
フィンガープリント オブジェクト はい
subject string はい 証明書から取得したサブジェクトの識別名
発行者 string はい 証明書の発行者の識別名
notBefore string はい 証明書の有効期間の開始タイムスタンプ
notAfter string はい 証明書の有効期間の終了タイムスタンプ

HTTPS 経由で contentUrl を提供する必要があることに注意してください。 この URL には特定の URL パターンがないため、このリポジトリ署名インデックス ドキュメントを使用して動的に検出する必要があります。

このオブジェクト内のすべてのプロパティ (除く contentUrl) は、contentUrl にある証明書から導出できる必要があります。 これらの導出可能プロパティは、ラウンド トリップを最小限に抑えるための便利な方法として提供されています。

fingerprints オブジェクトには、次のプロパティがあります。

名前 タイプ 必須 メモ
2.16.840.1.101.3.4.2.1 string はい SHA-256 フィンガープリント

キー名 2.16.840.1.101.3.4.2.1 は、SHA-256 ハッシュ アルゴリズムの OID です。

すべてのハッシュ値は、ハッシュ ダイジェストの小文字の 16 進エンコード文字列表現である必要があります。

要求のサンプル

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

サンプル応答

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