NuGet の署名済みパッケージの検証
NuGet パッケージに署名すると、パッケージ コンシューマーがパッケージの信頼性と整合性を検証できるようになります。 検証を有効にすると、パッケージ復元操作中に、.NET は署名済みパッケージを検証します。これは、パッケージ コンシューマーがプロジェクトをビルドまたは実行したときに自動的に行われます。
NuGet パッケージの署名は X.509 証明書に基づいており、署名済みパッケージの検証の前提条件は、コード署名とタイムスタンプの両方に対して有効な証明書ルート ストアです。
.NET 6.0.400 SDK 以降、適切なシステム ルート ストアが使用できない場合に、NuGet は .NET SDK に含まれる証明書バンドルを使って署名済みパッケージを検証します。 これらのバンドルは Microsoft Trusted Root Program から提供され、Windows 上のルート ストアと同じコード署名とタイムスタンプの証明書が含まれています。 これらの証明書バンドルには、NuGet.org からのパッケージを検証するために必要なすべてのルート証明書が含まれている必要があります。
sign
や verify
などの一部の NuGet コマンドは、常に署名済みパッケージの検証を実行します。
以下のセクションでは、オペレーティング システムごとに次の内容について説明します。
- 復元操作中の暗黙的な検証が既定で有効な場合。
- 有効にする方法。
- 使われるルート ストア。
Windows
パッケージの復元操作中の検証は、常に有効です。
NuGet は Windows 上で既定のルート ストアを使います。これは、汎用のコード署名とタイムスタンプを既にサポートしています。 .NET SDK の証明書バンドルは使われません。 すべての署名済みパッケージ検証機能は、それが導入された .NET SDK バージョンの Windows でサポートされています。
Linux
重要
署名済みパッケージ検証機能は .NET 5 SDK で追加されましたが、この機能は .NET 6.0.400 SDK 以前の Linux ではサポートされていません。 6.0.400 より前のバージョンの .NET SDK では、署名済みパッケージの検証を使用しないでください。
.NET 8 SDK より前の場合、パッケージの復元操作中は、既定で検証が無効です。 オプトインするには、環境変数 DOTNET_NUGET_SIGNATURE_VERIFICATION
を true
に設定します。
.NET 8 SDK 以降では、検証は既定で有効になっています。 オプトアウトするには、環境変数 DOTNET_NUGET_SIGNATURE_VERIFICATION
を false
に設定します。
コード署名証明書の検証のために、NuGet は最初に次の場所で証明書バンドルを探します。
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
有効な証明書バンドルが見つかった場合、NuGet は .NET SDK の証明書バンドルよりもそれをコード署名に対して優先します。 .NET SDK の証明書バンドルと少なくとも同じルート証明書のセットが含まれている場合、NuGet による署名付きパッケージの検証は成功するはずです。 ルート証明書が不足していた場合 (NuGet.org の署名済みパッケージで使われるものなど)、NuGet による署名済みパッケージの検証は、信頼されていない状態で失敗します (NU3018 または NU3028 による)。 この証明書バンドルにルート証明書を追加すると、検証を成功させることができます。ただし、この証明書バンドルはシステム全体の信頼ストアですが、.NET SDK の証明書バンドルはアプリケーション全体の信頼ストアとして使われる点に注意してください。
上記の場所に有効な証明書バンドルが見つからない場合、NuGet はコード署名に .NET SDK の証明書バンドルを使用するようにフォールバックします。
タイムスタンプの証明書の検証では、NuGet は常にタイムスタンプに .NET SDK の証明書バンドルを使います。
macOS
パッケージの復元操作中は、既定で検証が無効です。 オプトインするには、環境変数 DOTNET_NUGET_SIGNATURE_VERIFICATION
を true
に設定します。 ただし、検証は有効にしないことをお勧めします。 詳細については、NuGet/Home#11985 と NuGet/Home#11986 のページを参照してください。
NuGet は、.NET SDK の証明書バンドルのみを使います。
重要
署名済みパッケージ検証機能は .NET 5 SDK で追加されましたが、この機能は現在 macOS ではサポートされていません。 6.0.400 より前のバージョンの .NET SDK では、署名済みパッケージの検証を使用しないでください。 既定の無効のままにします。
関連項目
.NET