次の方法で共有


NuGet の署名付きパッケージの検証

NuGet パッケージに署名して、パッケージ コンシューマーがパッケージの信頼性と整合性を検証できるようにします。 検証が有効になっている場合、.NET はパッケージの復元操作中に署名済みパッケージを検証します。これは、パッケージ コンシューマーがプロジェクトをビルドまたは実行するときに自動的に行われます。

NuGet パッケージ署名は X.509 証明書に基づいており、署名付きパッケージ検証の前提条件は、コード署名とタイムスタンプの両方に有効な証明書ルート ストアです。

.NET 6.0.400 SDK 以降、NuGet は .NET SDK に含まれる証明書バンドルを使用して、適切なシステム ルート ストアが使用できない署名済みパッケージを検証します。 これらのバンドルは 、Microsoft の信頼されたルート プログラム から提供され、Windows のルート ストアと同じコード署名証明書とタイムスタンプ証明書が含まれています。 これらの証明書バンドルには、 NuGet.org からパッケージを検証するために必要なすべてのルート証明書が含まれている必要があります。

signverifyなどの一部の NuGet コマンドでは、常に署名付きパッケージの検証が実行されます。

各オペレーティング システムの次のセクションでは、次の内容について説明します。

  • 復元操作中に暗黙的な検証が既定で有効になっている場合。
  • 有効にする方法。
  • 使われるルート ストア。

ウィンドウズ

検証は、パッケージの復元操作中に常に有効になります。

NuGet では、Windows 上の既定のルート ストアが使用されます。このストアでは、汎用コードの署名とタイムスタンプが既にサポートされています。 .NET SDK 証明書バンドルは使用されません。 すべての署名付きパッケージ検証機能は、導入された .NET SDK バージョンの Windows でサポートされています。

Linux

Von Bedeutung

署名付きパッケージ検証機能は .NET 5 SDK で追加されましたが、.NET 6.0.400 SDK までは Linux ではサポートされません。 6.0.400 より前のバージョンの .NET SDK では、署名付きパッケージ検証を使用しないでください。

.NET 8 SDK より前のバージョンでは、パッケージの復元操作中に検証が既定で無効になっています。 オプトインするには、環境変数 DOTNET_NUGET_SIGNATURE_VERIFICATIONtrueに設定します。

.NET 8 SDK 以降では、検証は既定で有効になっています。 オプトアウトするには、環境変数 DOTNET_NUGET_SIGNATURE_VERIFICATIONfalseに設定します。

コード署名証明書の検証では、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_VERIFICATIONtrueに設定します。 ただし、検証は有効にしないことをお勧めします。 詳細については、「 NuGet/Home#11985 」および 「NuGet/Home#11986」を参照してください。

NuGet では、.NET SDK の証明書バンドルのみが使用されます。

Von Bedeutung

署名付きパッケージ検証機能は .NET 5 SDK で追加されましたが、macOS では現在サポートされていません。 6.0.400 より前のバージョンの .NET SDK では、署名付きパッケージ検証を使用しないでください。 既定では無効のままにします。

こちらも参照ください