NuGet 警告 NU3042

Linux および macOS のみの NuGet 6.6.0 以降

The following X.509 root certificate is untrusted because it is not present in the certificate bundle at <file-path>.  For more information, see documentation for NU3042.
    Subject:  <certificate subject>
    Fingerprint (SHA-256):  <certificate fingerprint>
    Certificate (PEM):
<PEM-encoded certificate>

問題点

署名済みパッケージの検証に失敗した場合に警告 NU3042 が発生します。これは、コード署名またはタイムスタンプ付きの適切な信頼されたルート証明書バンドルにルート証明書が見つからなかったためです。 この警告は、署名付きパッケージの検証が有効になっている場合にのみ Linux と macOS で発生し、Windows では発生しません。 NU3042 は NU3018 または NU3028 に付随する必要があります。

各 .NET 7+ SDK リリースには、Microsoft の信頼されたルート プログラムから提供される 2 つのルート証明書バンドルが含まれています。 1 つの証明書バンドルには、コード署名に有効なすべての信頼されたルートが含まれています。もう 1 つはタイムスタンプに有効なすべての信頼されたルートを含んでいます。 NuGet では、署名付きパッケージの検証が有効な場合、Linux および macOS でこれらの証明書バンドルが使用されます。

Linux では、NuGet は、.NET SDK のコード証明書バンドルよりもシステム全体のコード署名証明書バンドルを優先します。

NU3042 の根本原因は、次のいずれかある可能性があります。

  • (Linux のみ)システム全体のコード署名証明書バンドルには、警告で参照されているルート証明書が含まれていません。
  • .NET SDK の証明書バンドルが期限切れです。

詳細については、「NuGet の署名済みパッケージの検証」を参照してください。

解決策

Linux では、証明書を信頼し、システム全体のコード署名証明書バンドルを使用している場合は、ルート証明書をバンドルに追加することを検討してください。 このソリューションは、システム全体の信頼を付与するため、適切でない場合があります。

.NET SDK の証明書バンドルが期限切れの場合は、.NET SDK のより新しいリリースに更新してください。

他のすべてが失敗した場合は、環境変数 DOTNET_NUGET_SIGNATURE_VERIFICATIONfalse に設定して署名済みパッケージの検証をオプトアウトし、NuGet チームに問題点を提起して、プラットフォームで署名済みパッケージ検証を改善する方法を提案します。

詳細については、「NuGet の署名済みパッケージの検証」を参照してください。