macOS下执行dotnet restore报NU3028/NU3037签名过期错误如何解决
问题概述
使用.NET 5.0.104版本、macOS Big Sur 11.6系统时,执行dotnet restore命令批量出现NU3028: 签名时间戳链被显式不信任、NU3037: 仓库副签名有效期已过期报错,无法完成包还原。
问题原因
这不是NuGet官方服务故障,触发报错有两个核心原因:
- .NET 5已经于2022年5月停止官方支持,5.0版本系列NuGet包的作者签名、仓库副签名所使用的时间戳证书已自然过期,绑定.NET 5 SDK的旧版NuGet客户端未适配后续的证书链更新规则,无法识别有效签名。
- macOS 11.6的系统根证书信任策略已将旧版DigiCert时间戳根证书标记为不信任,触发
ExplicitDistrust类警告。
修复方案
- 【推荐方案】将项目从.NET 5升级到.NET 6或更高的长期支持版本,同步升级项目依赖的NuGet包到对应版本,高版本.NET SDK自带的NuGet客户端已经修复签名验证规则,可直接解决报错。
- 【临时兼容方案】如果必须保留.NET 5开发环境,可在执行restore命令时添加参数跳过签名验证:
dotnet restore /p:NuGetSignatureValidationMode=AllowUnsigned
也可以在项目根目录创建nuget.config文件,添加以下配置永久跳过当前项目的签名验证:
<configuration> <config> <add key="signatureValidationMode" value="accept" /> </config> </configuration>
- 注意:跳过签名验证仅建议本地开发使用,生产环境构建请优先升级框架版本规避安全风险。
内容的提问来源于stack exchange,提问作者br8kpoint
相关产品推荐
相关产品推荐

