通过


排查 Visual Studio 中的代理和防火墙问题

在企业代理或防火墙后面使用 Visual Studio 时,可能会遇到影响需要网络访问的功能的连接问题,例如 NuGet 包还原、扩展安装和 AI 支持的功能。 代理问题通常分为两类:

  • 配置问题:代理服务器设置、证书或网络配置出现问题。 这些问题由 IT 管理员解决。
  • 所需的设置:Visual Studio 需要有关网络配置的其他信息。 有关如何向 Visual Studio 提供所需设置的详细信息,请参阅本文。
  • 产品问题:如果你已确定问题不是配置问题或提供的设置未解决你看到的问题,则这可能是产品问题。 在提交工单之前,请按照收集诊断信息中的步骤进行操作。

本文可帮助你确定问题属于哪个类别,并为常见问题提供解决方案。

先决条件

在排查代理问题之前,请确保您已经完成以下步骤:

已知问题和解决方案

以下部分介绍常见的代理相关问题及其解决方案。

SSL 连接错误(证书颁发机构不受信任)

症状:您会看到类似System.Net.Http.HttpRequestException: The SSL connection could not be established的错误,并带有内部异常IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host

类别:配置问题

解决方案:您的代理服务器使用的证书颁发机构(CA)必须被安装并信任。 完成以下两个步骤:

  1. 在 Windows 受信任的根证书颁发机构 存储中安装所有代理签发的证书(包括根和中间证书)。 有关详细信息,请参阅 受信任的根证书颁发机构证书存储
  2. NODE_EXTRA_CA_CERTS 环境变量设置为 CA 证书文件的路径。 使用 Node.js 进程的功能需要此步骤。

注释

如果防火墙阻止连接而不是代理问题,也可能发生此错误。

透明代理失败

症状:使用透明代理时网络调用失败,出现各种错误消息。

类别:配置问题

解决方案:透明代理可能会导致各种问题,因为它们截获流量而不进行显式配置。 代理服务器可能会对特定进程和应用程序使用允许列表或阻止列表。 请与网络管理员合作:

  • 验证是否允许 Visual Studio 进程通过代理
  • 检查是否阻止了特定端点
  • 查看 SSL 检查设置

Copilot 身份验证正常运行,而 Copilot 聊天不工作

症状:你可以登录到 GitHub,Copilot 指示你已经过身份验证,但使用 Copilot 聊天会导致错误。

类别:配置问题

解决方案:这些症状意味着 Visual Studio 自己的 .NET 请求失败,但 .NET Framework 请求正常工作。 有许多可能的原因,包括代理阻止特定网络终端,或者常规 IPv6 流量被阻止。 检查代理或防火墙是否未阻止 IPv6 流量。 请尝试以下解决方案之一:

  • 首选:将代理配置为允许 IPv6 流量。
  • 替代方法:将环境变量 DOTNET_SYSTEM_NET_DISABLEIPV6 设置为 1 强制 IPv4。
  • 如果使用进程允许列表:将 DevHub.exe 添加到防火墙或代理的允许列表中。
  • 首选:将代理配置为允许 IPv6 流量。
  • 替代方法:将环境变量 DOTNET_SYSTEM_NET_DISABLEIPV6 设置为 1 强制 IPv4。
  • 如果使用进程允许列表:将 ServiceHub.Host.dotnet.x64.exe 添加到防火墙或代理的允许列表中。

部分证书链错误

症状:堆栈跟踪显示 The remote certificate is invalid because of errors in the certificate chain: PartialChain

类别:配置问题

解决方案:证书链中缺少一个或多个中间证书。 有关识别缺失证书的步骤,请参阅 “诊断部分证书链问题 ”,然后与 IT 管理员一起安装它们。

需要代理身份验证(基本身份验证出现 407 错误)

症状:使用带有基本身份验证的代理时,堆栈跟踪显示 (407) Proxy Authentication Required

类别:所需的设置

解决方案:Visual Studio 支持使用基本身份验证登录到 GitHub 和在身份验证代理后面使用 Microsoft Entra 帐户,但大多数版本的 Visual Studio 不支持在使用基本身份验证的身份验证代理后面使用 Copilot。

启动时,将显示一个提示来捕获凭据。 凭据将存储在凭据管理器中的Windows 凭据下,作为互联网或网络地址,然后是代理要求的用户名和密码。

启动时,将出现一个提示来请求输入凭据。 凭据将存储在凭据管理器中的Windows 凭据下,作为互联网或网络地址,然后是代理要求的用户名和密码。

还可以直接在 Visual Studio 中配置代理凭据。 请参阅 Visual Studio 中的“配置代理设置”。

需要代理身份验证(NTLM 或 Kerberos)

症状:将代理服务器与 NTLM 或 Kerberos 身份验证配合使用时,依赖于网络的功能不起作用。

类别:所需的设置

解决方案:将 Visual Studio 配置为使用默认代理凭据:

  1. 转到 “工具>选项>代理设置”。
  2. 选择 “使用登录的 Windows 帐户 ”以使用当前的 Windows 凭据。
  3. 重启 Visual Studio,使更改生效。

有关详细信息,请参阅 在 Visual Studio 中配置代理设置

VS_USE_DEFAULTPROXY 环境变量设置为 true。 对于 Copilot,将 COPILOT_USE_DEFAULTPROXY 设置为 true

注释

若要稍后禁用此解决方法,请完全删除环境变量。 将false设置为不禁用该功能。

需要显式代理配置

症状:即使代理不需要身份验证,依赖于网络的功能也不起作用。

类别:所需的设置

解决方案:显式配置代理服务器地址:

  1. 转到 “工具>选项>代理设置”。
  2. 选择 “使用自定义代理设置”。
  3. 输入代理服务器 URL 和端口。
  4. 重启 Visual Studio,使更改生效。

有关详细信息,请参阅 在 Visual Studio 中配置代理设置

HTTPS_PROXYHTTP_PROXY 环境变量设置为您的代理服务器地址。 Copilot 需要为 Visual Studio 设置这些设置。

有关详细的代理配置步骤,请参阅 Visual Studio 中的“配置代理设置”。

排查 SSL 证书问题

当代理服务器执行 SSL 检查并且未正确安装或信任所需的证书时,通常会发生 SSL 证书错误。 使用以下步骤诊断根本原因。

回答诊断问题

请通过这些问题缩小问题范围:

  1. 证书是否受信任? 检查代理的 CA 证书是否已安装在当前用户的证书存储或本地计算机存储中。
  2. Visual Studio 是否以其他用户身份运行? 如果 Visual Studio 是以不同于登录 Windows 的用户身份运行,可能无法访问当前用户存储中的证书。
  3. 您是否已被认证使用在线服务? 检查是否可以在 Visual Studio 中登录到Microsoft或 GitHub 帐户。
  4. 该功能以前是否正常工作? 如果该功能之前正常工作,但后来停止工作,则可能是上游网络配置发生了更改。 这不是 Visual Studio 产品问题。
  5. 是否可以访问其他网络资源? 如果可以浏览 Web 但 Visual Studio 功能失败,则问题专门与 Visual Studio 的网络连接有关。

根据症状确定问题

使用这些模式来识别你的特定问题:

  • 用户存储中的证书,VS 以不同用户身份运行:Visual Studio 可能无法访问证书。 请改为在本地计算机存储中安装证书。
  • 某些功能工作但其他功能失败:这通常表示 IPv6 问题或 .NET Framework 与 .NET Core 网络之间的差异。 请参阅 Copilot 身份验证的工作原理,而 Copilot 聊天则不起作用
  • 昨天工作,今天中断:发生了上游网络配置更改。 请与 IT 管理员联系,确定更改的内容。

诊断部分证书链问题

如果看到 PartialChain 错误,请使用以下步骤确定缺少的证书。 这些步骤需要 OpenSSL 命令行工具。

  1. 运行以下命令以查看证书链,将 PROXY_HOST:PORT 替换为您的代理地址,将 target.host.com 替换为您要访问的端点:

    openssl s_client -proxy PROXY_HOST:PORT -connect target.host.com:443 -showcerts -verify 5 </dev/null
    
  2. 对于输出中的每个证书,运行以下命令来检查链(将每个证书保存到文件后,如下所示cert1.pemcert2.pem):

    openssl x509 -in cert1.pem -noout -subject -issuer -ski -aki
    
  3. 通过检查来验证证书链:

    • 证书 N 的 颁发机构密钥标识符(AKI) 应与证书 N+1 的 使用者密钥标识符(SKI) 匹配。
    • 证书 N 的 颁发者 DN 应与证书 N+1 的 使用者 DN 匹配。

如果在链中发现中断,请联系 IT 管理员获取并安装缺少的中间证书。

注释

如果一个证书的 AKI 与链中下一个证书的 SKI 不匹配,即使 Web 浏览器成功,.NET 也会拒绝请求。 这是比大多数浏览器执行的更严格的验证。

产品问题:收集诊断信息以获取支持

如果在 Visual Studio 中提供了所需的设置后确定问题不是配置问题,请提交反馈票证。 请参阅 如何报告 Visual Studio 的问题。 在提交代理问题的反馈票证时,请提供以下信息来帮助我们进行调查。 提供的详细信息越多,我们可以更快地确定问题是产品 bug 还是配置问题。

检查身份验证状态

验证以下身份验证状态:

  1. GitHub 身份验证

    • 打开 Windows>凭据管理器>Windows 凭据
    • 查找带有 git: 前缀的凭据。
    • 检查 %LocalAppData%/.IdentityService/GitHubV3AccountStore.json 的 GitHub 帐户元数据。
  2. 功能状态:请注意哪些功能正常工作,哪些功能失败(例如 NuGet 还原、扩展安装、AI 功能)。

收集日志和配置详细信息

收集以下信息:

  1. Visual Studio 日志:创建 zip %temp%/Vslogs文件。

  2. 网络跟踪:如果可能,请收集 Fiddler 跟踪,以显示失败请求。

  3. 代理配置详细信息

    • 这是显式代理还是透明代理?
    • 代理是否需要身份验证? 如果是,哪种类型(基本,NTLM,Kerberos)?
    • 代理是否阻止或允许特定应用程序?
    • 是否安装并信任所需的证书? 是否有任何证书被吊销或过期?
    • 是否还配置了防火墙?
    • 是否启用了 SSL 检查?
    • 是否通过代理路由 IPv6 流量?
  4. 与其他工具的比较:Visual Studio Code 或其他应用程序是否通过此代理工作?