【发布时间】:2022-07-07 05:18:37
【问题描述】:
【问题讨论】:
标签: github github-copilot
【问题讨论】:
标签: github github-copilot
Copilot 错误:“GitHub Copilot 无法连接到服务器。扩展激活失败:证书链中的自签名证书”通常是在企业网络后面使用 CoPilot 引起的。
大多数企业网络都有一个“中间人”设备,可以动态断开所有离开家进入互联网的安全 SSL 流量。这确保他们可以检查任何离开的流量,包括您的网上银行。通常,自动化会清除流量以寻找窃取公司机密或 IP 并发出警报。如果需要,这一切都会被记录下来并进一步审查。
此操作会留下假证书链作为指纹。被调用站点的证书被替换为伪造的,并且由公司自己的私人 CA 机构签名。因此证书链中的自签名证书错误。
公司 CA 已从任何公司设备(电话\笔记本电脑)安装为受信任的 CA。因此,本地浏览器和其他桌面应用程序信任这个伪造的证书链 - 因此不要担心有人在窥探您的安全网络流量(该公司确实拥有网络和设备)。
默认情况下,VSCode 不信任已安装的桌面证书,因此它注意到 GitHub 证书不再由受信任的公共 CA 机构签名。
正如上面的 Rypox 所述,VSCode 扩展“Win-CA”(必须设置为“附加”模式)解决了这个问题。它告诉 VSCode 也信任安装在员工桌面上的 CA。这让 VSCode 再次高兴地信任了假证书链。不需要“白名单”,也与“VPN”无关。但当然也不是那么明显。一个有趣的 CA 信任问题。
通过您的浏览器很容易确认这确实存在。转到任何外部站点(如 Amazon)并查看站点“Cert”以查看 CA 是谁(Certification Path)。它应该“不”包含对您公司的任何引用。在您自己的个人笔记本电脑上查看公司网络外部的相同证书。
...“矩阵中的一个小故障”,安装 Win-CA 有助于再次隐藏它,一切都恢复正常。
【讨论】:
在 macOS 上,您可以使用此脚本对 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
_EXTENSIONFILEPATH="${_VSCODEDIR}/${_COPILOTDIR}/dist/extension.js"
_DEVEXTENSIONFILEPATH="${_VSCODEDIR}/${_COPILOTDEVDIR}/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
另存为monkey-patch-copilot.sh,然后是chmod +x monkey-patch-copilot.sh。然后您应该能够运行:./monkey-patch-copilot.sh 来应用补丁。
注意:我不是原作者。这是在 Copilot 反馈论坛上找到的。
【讨论】:
公司代理也有同样的问题,在附加模式下运行的win-ca 扩展解决了这个问题。
【讨论】:
这看起来与我得到的错误相似。我相信我们公司网络中这种情况的根源是 ssl 检查过程,因此当打开并检查 https 流量时,它会破坏证书链并显示此错误。解决方法是将 GitHub Copilot 服务器添加到 ssl 检查白名单中,以便不检查流量。
【讨论】:
企业 VPN 是问题所在(与 @mark-derry 的相同)。
Jetbrain 的 PyCharm / DataSpell 允许接受自签名证书。
VSCode 似乎还没有这个选项。
【讨论】:
对于任何 MacOS 用户,VSCode 扩展 linhmtran168.mac-ca-vscode 也可以提供帮助。类似于前面提到的win-ca。
https://marketplace.visualstudio.com/items?itemName=linhmtran168.mac-ca-vscode
【讨论】: