导致“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可帮助隐藏它,并使所有内容恢复正常。
win-ca
扩展帮我解决了使用append
的问题!我正在运行:Win10虚拟机,Copilot,VSCode,WSL1,Ubuntu 20。Copilot在Ubuntu(WSL1,客户端)上一直都能正常工作。证书错误只发生在Windows端。别忘了重新启动VSCode。 - treckstar我曾经遇到过企业代理的同样问题,使用 win-ca 扩展程序解决了这个问题。
在设置中切换到 追加
模式(它不是默认模式)
重新启动 VsCode
PS:这只适用于 Windows 解决方案(如需 Mac 解决方案,请参见另一篇文章 - github copilot 上证书链中存在自签名证书)
对于任何MacOS用户,我发现VSCode扩展linhmtran168.mac-ca-vscode也可以帮助解决这个问题。它类似于先前提到的win-ca。
https://marketplace.visualstudio.com/items?itemName=linhmtran168.mac-ca-vscode
_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反馈论坛上找到的。
extension.js
,但存在agent.js
和service.js
,并且包含许多地方的rejectUnauthorized:
。无法找到d={...l
,但我有d={...c
和d={...n
。如何确定应替换哪个?如果我将文件上传到某个地方,您是否愿意帮助我解决这个问题? - Daniel Hjertholm我找到了一个解决方案,适用于Intellij。我在我的博客上写了这个问题的解决方法:https://sidd.io/2023/01/github-copilot-self-signed-cert-issue/
从高层次来看,我认为插件的架构可能是相同的:
IDE本地CoPilot插件
---进行RPC调用---> 基于NodeJS的CoPilot代理程序
而这个基于NodeJS的CoPilot代理程序
有自签名证书的问题(至少在我的情况下)。
修复步骤如下:
.pem
格式,则将其转换为.pem
格式.pem
证书的路径导出到NODE_EXTRA_CA_CERTS
变量中NODE_EXTRA_CA_CERTS
变量(无需管理员权限),将其设置为绝对路径,例如“C:\path\to\ca-bundle.crt”。 - LCC(setenv "NODE_EXTRA_CA_CERTS" "/path/to/cer/file")
- undefined企业VPN是问题(与@mark-derry相同)。
Jetbrain的PyCharm / DataSpell允许接受自签名证书。
目前似乎VSCode还没有这个选项。
这看起来与我遇到的问题类似。我认为我们公司网络中的源头是ssl检查过程,当https流量被打开和检查时,它会破坏证书链并显示此错误。解决方法是将GitHub Copilot服务器添加到ssl检查白名单中,以便该流量不受检查。
安装 [win-ca][1] [1]: https://marketplace.visualstudio.com/items?itemName=ukoloff.win-ca
按下 CTRL + SHIFT + P 搜索 @ext:ukoloff.win-ca
将 Win-Ca: Inject 设置为 追加
重新启动 IDE
开始编码