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 应伴随 NU3018NU3028 出现。

每个 .NET 7 及以上版本的 SDK 发布版本均包含两个源自 Microsoft 可信根计划的根证书捆绑包。 一个证书捆绑包包含对代码签名有效的所有可信根,而另一证书捆绑包则包含对时间戳添加有效的所有可信根。 启用已签名包验证后,NuGet 会在 Linux 和 macOS 上使用这些证书捆绑包。

在 Linux 上,NuGet 将首选系统范围的代码签名证书捆绑包,而不是 .NET SDK 的代码签名证书捆绑包。

NU3042 的根本原因可能为以下原因之一:

  • (仅限 Linux)系统范围的代码签名证书捆绑包不含警告中引用的根证书。
  • .NET SDK 的证书捆绑包已过期。

有关详细信息,请参阅 NuGet 签名的包验证

解决方案

在 Linux 上,如果信任证书并使用系统范围的代码签名证书捆绑包,请考虑将根证书添加到此捆绑包。 此解决方案可能不适合,因为它将授予系统范围的信任。

如果 .NET SDK 的证书捆绑包已过期,请更新到较新版本的 .NET SDK。

如果所有其他操作均失败,请通过将环境变量 DOTNET_NUGET_SIGNATURE_VERIFICATION 设为 false向 NuGet 团队提交问题来选择退出已签名包验证,以建议如何在平台上改进已签名包验证。

有关详细信息,请参阅 NuGet 签名的包验证