リポジトリの署名
パッケージ ソースが公開済みパッケージへのリポジトリ署名の追加をサポートしている場合、クライアントはパッケージ ソースによって使用される署名証明書を特定できます。 このリソースを使用すると、クライアントは、リポジトリ署名済みパッケージに改ざんがあったかどうか、予期しない署名証明書があるかどうかを検出できます。
このリポジトリ署名情報のフェッチに使用されるリソースは、サービス インデックス内にある 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 つの情報が含まれています。
- ソースにあるすべてのパッケージがこのパッケージ ソースによって署名されたリポジトリであるかどうか。
- パッケージ ソースがパッケージに署名するために使用する証明書のリスト。
ほとんどの場合、証明書のリストには追加されるだけです。 以前の署名証明書の有効期限が切れ、パッケージ ソースが新しい署名証明書の使用を開始する必要がある場合は、新しい証明書がリストに追加されます。 証明書がリストから削除された場合、削除された署名証明書で作成されたすべてのパッケージの署名は、クライアントによって有効と見なされなくなります。 この場合、パッケージの署名は無効です (ただし、パッケージは無効とは限りません)。 クライアント ポリシーでは、署名されていないパッケージのインストールが許可される場合があります。
証明書失効 (鍵漏えいなど) の場合、パッケージ ソースは、影響を受ける証明書によって署名されたすべてのパッケージに再署名することが期待されます。 さらに、パッケージ ソースは、署名証明書のリストから影響を受ける証明書を削除する必要があります。
次の要求は、リポジトリ署名インデックスをフェッチします。
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/5.0.0/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"
},
{
"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"
}
]
}