NuGet 已签名包验证选项

重试不受信任的根故障

注意

此问题仅适用于 Microsoft 且针对 Microsoft 可信根程序中的根证书。

证书链生成期间,Windows 会在首次使用时提取相关的第三方根证书,并将其添加为本地可信根证书。 Windows 在内部会使用 RPC 调用来启动此网络提取;如果系统十分繁忙,此 RPC 调用则可能会失败。 此失败会导致根证书在本地不受信任。 此问题可能会在第一次观察到根证书时出现,但当根证书在本地受信任后,此证书便不会再遇到该问题。 通常,通过重试可成功建立链。

对于 NuGet 用户,此问题的症状为:重试时 NuGet 操作通常会成功,并会出现以下某一情况:

  • 出现 NU3028 并显示如下所示消息:“证书链已正确处理,但在信任提供程序不信任的根证书中终止。”
  • 出现 NU3037 并显示如下所示消息:“存储库主签名有效期已过期。”

注意

此选项从 NuGet 6.0.0 开始可供使用,且仅适用于上述特定于 Windows 的故障。 此选项不适用于任何其他场景,且对 Linux 或 macOS 没有影响。

NuGet 6.8.0 和 .NET 8 SDK 之前的版本,此选项默认为禁用状态。

从 NuGet 6.8.0 和 .NET 8 SDK 版本开始,此选项在 Windows 上默认为启用状态。 除非要替代默认值 3,1000 或选择退出,否则不需要显式设置环境变量。若要选择退出,请将环境变量设置为值 0

可选择在 Windows 上针对不受信任根故障启用实验性的自动重试,具体方法是:设置一个名为 NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY 的环境变量,其值由 2 个用逗号分隔的正整数组成,这两个数字分别表示重试计数和休眠间隔(以毫秒为单位)。 应该根据需求选择适合的值。

例如,将此环境变量设为类似 3,1000 的值,从而:

set NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY=3,1000

......在每次尝试之间最多尝试 4 次(初始尝试外加 3 次重试),且每次尝试时间隔 1 秒(1,000 毫秒)。