在GitHub Copilot上的证书链中存在自签名证书。

52
我安装了GitHub Copilot,但是扩展程序不起作用,总是显示以下错误:

enter image description here

GitHub Copilot无法连接到服务器。扩展激活失败:"证书链中的自签名证书"
来源:GitHub Copilot(扩展)显示输出日志 我该怎么解决这个问题?

https://docs.github.com/en/copilot/troubleshooting-github-copilot/troubleshooting-network-errors-for-github-copilot#troubleshooting-certificate-related-errors - undefined
11个回答

68

导致“GitHub Copilot无法连接服务器。扩展激活失败:证书链中存在自签名证书”的Copilot错误通常是在企业网络后使用CoPilot时发生的。

  • 大多数企业网络都有一个“中间人”设备,它动态打开所有离开家庭进入互联网的安全SSL流量。这确保他们可以检查所有离开的流量,包括您的在线银行业务。通常,自动化会清除流量,寻找公司机密或IP盗窃,并引发警报。如果需要,所有内容都会被记录并进行进一步审核。

  • 此操作留下了一个假的证书链作为指纹。所调用站点的证书被替换为伪造证书,并由公司自己的私有CA机构签名。因此出现了“证书链中存在自签名证书”的错误。

  • 从任何公司设备(手机\笔记本电脑)上,公司CA已经安装为可信CA。因此,本地浏览器和其他桌面应用程序信任此伪造的证书链-因此不会引起任何人对您的安全网络流量进行窥探的担忧(公司拥有网络和设备)。

  • 默认情况下,VSCode不信任已安装的桌面证书,因此它会注意到GitHub证书不再由可信的公共CA机构签名。

  • 正如Rypox所述,VSCode扩展程序“Win-CA”(必须设置为“附加”模式)可以解决这个问题。它告诉VSCode也信任员工桌面上安装的CA,这样VSCode就可以再次信任伪造的证书链,无需进行'白名单'操作,也与'VPN'无关。但当然并不是那么显而易见的。这是一个有趣的CA信任问题。

  • 从您的浏览器确认此问题非常容易。访问任何外部站点(如Amazon),查看站点的“证书”以查看CA(认证路径)。它不应包含您公司的任何引用。从公司网络外部在个人笔记本电脑上查看同一证书。

...“矩阵中的小故障”,安装Win-CA可帮助隐藏它,并使所有内容恢复正常。


3
你是否知道 PyCharm 的解决方案?非常感谢! - qichao_he
可能是在 VPN 连接下发生的。 - danvitoriano
5
你知道如何在VS2022中解决这个问题吗?我无法关闭我的公司VPN,也不知道VPN使用哪些证书来解决这个问题,有什么想法吗? - Nicolas Belley
1
你救了我的一天。谢谢! - Gabriel
1
win-ca扩展帮我解决了使用append的问题!我正在运行:Win10虚拟机,Copilot,VSCode,WSL1,Ubuntu 20。Copilot在Ubuntu(WSL1,客户端)上一直都能正常工作。证书错误只发生在Windows端。别忘了重新启动VSCode。 - treckstar
显示剩余2条评论

47

我曾经遇到过企业代理的同样问题,使用 win-ca 扩展程序解决了这个问题。

在设置中切换到 追加 模式(它不是默认模式)

重新启动 VsCode

PS:这只适用于 Windows 解决方案(如需 Mac 解决方案,请参见另一篇文章 - github copilot 上证书链中存在自签名证书


2
我在我的 Mac 上使用了这个 VSCode 插件:https://marketplace.visualstudio.com/items?itemName=linhmtran168.mac-ca-vscode - Jared Christensen
这很容易..而且它有效..比编写脚本更好。 - Aswartha
可以确认这对我也起作用。谢谢! - j7skov
2
您需要按照以下路径进行操作以设置“追加”模式选择:文件/首选项/设置/扩展/Win-CA。 - undefined

25

4
这对我也起作用了。只需安装并重新启动VSCode即可。 - Naseeruddin V N
5
这个有多安全? - Fer Toasted
可以确认这个扩展在Mac上起作用! - tklives
是的,它完美地运行@tklives - undefined

21
在 macOS 和 Linux 上,您可以使用此脚本来修补 Copilot 扩展以使其正常工作:
更新: 还修复了 Copilot 聊天错误:
引用: 对话请求出错。请查看日志获取更多详细信息。
_VSCODEDIR="$HOME/.vscode/extensions"
_COPILOTDIR=$(ls "${_VSCODEDIR}" | grep -E "github.copilot-[1-9].*" | sort -V | tail -n1) # For copilot
_COPILOTDEVDIR=$(ls "${_VSCODEDIR}" | grep "github.copilot-nightly-" | sort -V | tail -n1) # For copilot-nightly
_COPILOTCHATDIR=$(ls "${_VSCODEDIR}" | grep -E "github.copilot-chat-*" | sort -V | tail -n1) # For copilot-chat
_EXTENSIONFILEPATH="${_VSCODEDIR}/${_COPILOTDIR}/dist/extension.js"
_DEVEXTENSIONFILEPATH="${_VSCODEDIR}/${_COPILOTDEVDIR}/dist/extension.js"
_CHATEXTENSIONFILEPATH="${_VSCODEDIR}/${_COPILOTCHATDIR}/dist/extension.js"

if [[ -f "$_EXTENSIONFILEPATH" ]]; then
    echo "Found Copilot Extension, applying 'rejectUnauthorized' patches to '$_EXTENSIONFILEPATH'..."
    perl -pi -e 's/,rejectUnauthorized:[a-z]}(?!})/,rejectUnauthorized:false}/g' ${_EXTENSIONFILEPATH}
    sed -i.bak 's/d={...l,/d={...l,rejectUnauthorized:false,/g' ${_EXTENSIONFILEPATH}
else
    echo "Couldn't find the extension.js file for Copilot, please verify paths and try again or ignore if you don't have Copilot..."
fi
if [[ -f "$_DEVEXTENSIONFILEPATH" ]]; then
    echo "Found Copilot-Nightly Extension, applying 'rejectUnauthorized' patches to '$_DEVEXTENSIONFILEPATH'..."
    perl -pi -e 's/,rejectUnauthorized:[a-z]}(?!})/,rejectUnauthorized:false}/g' ${_DEVEXTENSIONFILEPATH}
    sed -i.bak 's/d={...l,/d={...l,rejectUnauthorized:false,/g' ${_DEVEXTENSIONFILEPATH}
else
    echo "Couldn't find the extension.js file for Copilot-Nightly, please verify paths and try again or ignore if you don't have Copilot-Nightly..."
fi
if [[ -f "$_CHATEXTENSIONFILEPATH" ]]; then
    echo "Found Copilot-Chat Extension, applying 'rejectUnauthorized' patches to '$_CHATEXTENSIONFILEPATH'..."
    perl -pi -e 's/,rejectUnauthorized:[a-z]}(?!})/,rejectUnauthorized:false}/g' ${_CHATEXTENSIONFILEPATH}
    sed -i.bak 's/d={...l,/d={...l,rejectUnauthorized:false,/g' ${_CHATEXTENSIONFILEPATH}
else
    echo "Couldn't find the extension.js file for Copilot-Chat, please verify paths and try again or ignore if you don't have Copilot-Chat..."
fi

将其保存为类似于monkey-patch-copilot.sh的文件,然后运行chmod +x monkey-patch-copilot.sh。然后,您应该能够运行./monkey-patch-copilot.sh来应用补丁。

注意:我不是原作者。这是在Copilot反馈论坛上找到的。


4
我已经寻找解决方法很长时间了。谢谢! - Jonathan Picazo
1
我正在尝试为PyCharm / IntelliJ插件调整您的脚本。在dist文件夹中没有extension.js,但存在agent.jsservice.js,并且包含许多地方的rejectUnauthorized:。无法找到d={...l,但我有d={...cd={...n。如何确定应替换哪个?如果我将文件上传到某个地方,您是否愿意帮助我解决这个问题? - Daniel Hjertholm
1
你是否知道PyCharm的解决方法? - qichao_he
如果您正在使用VSCode的SSH插件,请确保将第一行更改为“_VSCODEDIR =”$ HOME / .vscode-server / extensions“”。 - LI0131
3
同样适用于Linux! - Daniel Bişar

11

我找到了一个解决方案,适用于Intellij。我在我的博客上写了这个问题的解决方法:https://sidd.io/2023/01/github-copilot-self-signed-cert-issue/

从高层次来看,我认为插件的架构可能是相同的:

IDE本地CoPilot插件 ---进行RPC调用---> 基于NodeJS的CoPilot代理程序

而这个基于NodeJS的CoPilot代理程序有自签名证书的问题(至少在我的情况下)。

修复步骤如下:

  1. 导出讨论中的自签名证书
  2. 如果尚未转换成.pem格式,则将其转换为.pem格式
  3. 将此.pem证书的路径导出到NODE_EXTRA_CA_CERTS变量中
  4. 重新启动IDE,它应该可以正常工作

2
这个答案将有助于解决Visual Studio的问题。它比安装扩展更正确。 - Logic01
1
这也适用于JetBrains IDE在Windows下:在“编辑帐户的环境变量”控制面板中设置NODE_EXTRA_CA_CERTS变量(无需管理员权限),将其设置为绝对路径,例如“C:\path\to\ca-bundle.crt”。 - LCC
2
“正在讨论的证书”是什么? - hipokito
1
Visual Studio 2022是否有完整的逐步解决方案?如何“导出自签名证书”?等等... - Siavash Mortazavi
对于Emacs用户,请将以下内容添加到您的init.el文件中:(setenv "NODE_EXTRA_CA_CERTS" "/path/to/cer/file") - undefined
显示剩余2条评论

2

企业VPN是问题(与@mark-derry相同)。

Jetbrain的PyCharm / DataSpell允许接受自签名证书。

目前似乎VSCode还没有这个选项。


2
我尝试按照这里的说明添加自签名证书,但是没有成功。我还尝试了自动接受不受信任的证书,也没有起作用。你是否成功地让JetBrains/PyCharm合作者插件与具有自签名证书的企业VPN配合使用? - qichao_he

1

这看起来与我遇到的问题类似。我认为我们公司网络中的源头是ssl检查过程,当https流量被打开和检查时,它会破坏证书链并显示此错误。解决方法是将GitHub Copilot服务器添加到ssl检查白名单中,以便该流量不受检查。


有相同的问题;不幸的是,在公司中让事情被列入白名单可能会非常具有挑战性。 - Neil

1
  1. 安装 [win-ca][1] [1]: https://marketplace.visualstudio.com/items?itemName=ukoloff.win-ca

  2. 按下 CTRL + SHIFT + P 搜索 @ext:ukoloff.win-ca

  3. 将 Win-Ca: Inject 设置为 追加

  4. 重新启动 IDE

  5. 开始编码


这个问题的第二个最受欢迎的答案已经详细解释了:https://dev59.com/eVEG5IYBdhLWcg3wLFwk#71826748 - luk2302
@luk2302 这里没有提到如何使用附加功能。这就是我在这里发帖的原因。 - Sampath Wijesinghe

1
在我的情况下,是ZScaler,这个令人烦恼的企业应用。幸运的是,我们可以退出这个应用。退出Zscaler并重新加载在VSCode中的CoPilot扩展后,CoPilot又恢复正常工作了。

0
我在我的公司也遇到了同样的问题,我们按照以下步骤解决了它:
  1. 进入IntelliJ
  2. 按下Ctrl + Alt + S(设置)
  3. 搜索关键词"cert"
  4. 勾选"自动接受非受信任的证书"选项
  5. 重新启动IntelliJ

3., 4.

大家好,來自西班牙的問候。

感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有了相当多的答案,其中一个答案已经得到社区的广泛验证。您确定您的方法之前没有被提出过吗?如果是这样的话,能否解释一下您的方法有何不同,在什么情况下您的方法可能更好,并且/或者为什么您认为之前的答案不够满意。您能否友好地编辑您的答案并提供解释? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接