NuGet 要求所有包源都使用 HTTPS 而不是 HTTP。 此强制措施通过在包还原和相关作期间防止篡改和拦截来保护软件供应链。 NuGet 通过生成错误并在使用 HTTP 源时停止操作来强制实施此要求。
了解 HTTP 错误
当配置中的一个或多个包源使用 HTTP URL 而不是 HTTPS 时,会出现此错误。
在早期 NuGet 版本中,此方案生成了 警告 (NU1803)。
从 NuGet 6.12 及更高版本开始,除非明确允许使用 HTTP 源,否则会产生 错误。
建议的解决方法
在允许 HTTP 连接之前,请确认包源是否支持 HTTPS。 如果这样做,请更新源 URL 以使用安全协议:
<add key="MyFeed" value="https://contoso/packages/v3/index.json" />
切换到 HTTPS 可确保端到端加密,并且是推荐且更安全的方法。
允许不安全的 HTTP 馈送(可选择退出)
如果 HTTPS 不可用,并且你在受信任的或隔离的环境中运行,则可以显式允许 HTTP 源。
在 NuGet.Config 中设置 allowInsecureConnections 作为选项 1
使用 Visual Studio
手动编辑
NuGet.Config将
allowInsecureConnections="true"属性添加到受影响的源:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyHttpFeed" value="http://contoso/packages/v3/index.json" allowInsecureConnections="true" /> </packageSources> </configuration>
选项 2:使用命令行参数
对于支持它的命令,请包含以下标志以暂时允许 HTTP 连接:
对于 dotnet 命令:
--allow-insecure-connections
对于 NuGet.exe 命令,请使用:
-AllowInsecureConnections
支持选择退出选项的命令
| Tool | 指令 | 支持“允许不安全的连接” |
|---|---|---|
| nuget.exe | push |
NuGet 7.0 |
| dotnet CLI | dotnet nuget push |
.NET 10.0.1xx 及更新版本 |
| dotnet CLI | dotnet nuget add source |
.NET 9.0.1xx 及更新版本 |
跨工具推行 HTTPS 强制执行
NuGet 的 HTTPS 强制实施在各个版本之间逐步引入。 下表汇总了 警告(NU1803) 到 错误(NU1302)的进度。
| 受影响的版本 | 行为 |
|---|---|
| NuGet.exe 6.3+、Visual Studio 17.3+、.NET 6.0.100+ | ⚠️ 警告 (NU1803) - 允许但不建议使用 HTTP 源 |
| NuGet.exe 6.12+、Visual Studio 17.12+、.NET 9.0.100+ | ❌ 错误 (NU1302) - 除非显式允许,否则 HTTP 源被阻止 |