在尝试在Windows服务器上安装MSYS2软件包时出现证书错误。

20

我在我的Windows Server 2016上安装了MSYS2-64位以支持一些Linux库,例如OpenSSL,这是我在Ruby on Rails开发中需要的。 MSYS2已经部分安装了Ruby 2.7,但由于证书错误消息而未能完成。

我首先下载并安装msys2-x86_64-20210725.exe。它花费了很长时间,在几条有关更新信任数据库的消息后完成了安装:

==> Generating pacman master key. This may take some time.

==> Updating trust database...

==> Appending keys from msys2.gpg...

==> Locally signing trusted keys in keyring...

  -> Locally signed 6 keys.
==> Importing owner trust values...

==> Disabling revoked keys in keyring...

  -> Disabled 1 keys.
==> Updating trust database...

它在这个阶段停留了大约10分钟,但最终宣布安装成功。

然后我尝试通过运行pacman -Syuu来更新现有软件。如要求重启MSYS2,我重启了它,输入了该语句,但是一直出现以下错误:

$ pacman -Syuu
:: Synchronizing package databases...
 mingw32.db failed to download
 mingw64.db failed to download
 ucrt64.db failed to download
 clang64.db failed to download
 msys.db failed to download
error: failed retrieving file 'mingw32.db' from mirror.msys2.org : SSL certificate problem: self signed certificate in certificate chain
error: failed retrieving file 'mingw64.db' from mirror.msys2.org : SSL certificate problem: self signed certificate in certificate chain
error: failed retrieving file 'ucrt64.db' from mirror.msys2.org : SSL certificate problem: self signed certificate in certificate chain
warning: too many errors from mirror.msys2.org, skipping for the remainder of this transaction

我担心公司代理可能会拒绝自签名证书。有没有办法获得正确签名的证书并完成所有软件包的安装?

谢谢你的帮助!

3个回答

37

问题很好,但这不完全是企业代理拒绝自签名证书;而是 pacman 的 SSL 代理。

在您的浏览器中,转到 repo.msys2.org 查看正在使用哪些证书:

显示连接详细信息

打开详细信息:

证书详细信息

您需要逐个导出所有证书,但不需要 repo.msys2.org 的最低级证书:

查看证书

保存到本地文件:

复制到文件...

使用 Base-64 编码导出:

Base-64 编码

可以直接保存到信任源锚点文件夹。事物会不时地移动,但目前为止,那是 C:\msys64\etc\pki\ca-trust\source\anchors\<任意文件名>.cer

按照相同的步骤导入顶级根证书。保存在相同的路径下,但文件名不同。

$ update-ca-trust
## Done.
$ pacman -Syu

1
我的证书是.crt格式,需要重命名为ca-bundle.crt,然后放在C:\msys64\usr\ssl\certs目录下。详情请参考https://github.com/msys2/MSYS2-packages/issues/2529。 - user2959760

4
我的屏幕看起来与上面的截图不太一样,我没有选择将证书保存为.cer扩展名的选项;我只能使用.der扩展名保存。虽然这种方式也可以工作。当我点击小锁图标时,我的屏幕是这个样子的:

常规选项卡 详细信息选项卡


1
你为什么编辑了我的评论?我已经明确指出这是一条评论,而不是完整的答案,因为我没有权限这样做。 - Leonardo Cordeiro
我使用了唯一的证书 base64 ASCII 编码(*.crt),它也运行良好。 - undefined

1
如果您的计算机由一个组织管理,他们可能会对您所有的TLS连接进行中间人攻击,并在您的设备上安装自己的自定义CA证书,导致中间人连接被报告为安全。因为MSYS2中的OpenSSL目前无法与Windows系统的CA存储进行交互,所以它不知道您组织的独特证书,您必须手动添加并信任它们。

https://www.msys2.org/docs/faq/

在这里,提到了如何将您的组织的CA证书添加到MSYS2的受信任证书并进行注册。

"/etc/..." 的位置位于您的 MSYS2 安装的默认位置内。 - Satyam Raj
是的,你说得对。在另一种情况下,我不得不指定以下可信主机来避免证书检查:pip3 install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host raw.githubusercontent.com "apache-airflow==${AIRFLOW_VERSION}" - user1185081

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