Ubuntu 22.04 LTS 和 Composer curl 错误60 - SSL证书问题:无法获取本地颁发者证书

3
每当我使用Composer安装/更新命令或 "diagnose" 命令 composer diagnose -vvv 时,都会出现错误:

"curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: unable to get local issuer certificate"

我已经尝试过以下方法:

  • 更新到最新的Ubuntu(22.04)并使用了:
sudo apt install ca-certificates --reinstall
sudo update-ca-certificates -f
sudo mkdir -p /etc/pki/tls/certs
sudo ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-certificates.crt

实际上,诊断结果与预期相符:

检查 CA 文件 /etc/pki/tls/certs/ca-bundle.crt:有效

  • 重新运行 Composer 安装程序

这里还有一些可能会有用的信息:

Composer version: 2.2.6
PHP version: 8.1.2
PHP binary path: /usr/bin/php8.1
OpenSSL version: OpenSSL 3.0.2 15 Mar 2022
cURL version: 7.81.0 libz 1.2.11 ssl OpenSSL/3.0.2
2个回答

0

最终通过手动替换ca-bundle.crt文件解决了问题,之前意识到即使是简单的curl/wget CLI命令(在PHP/Composer之外)也会返回相同的错误(这就是下面--no-check-certificate的原因)。

sudo mv /etc/ssl/certs/ca-bundle.crt /etc/ssl/certs/ca-bundle.crt.backup
sudo wget -O /etc/ssl/ca-bundle.crt https://curl.se/ca/cacert.pem --no-check-certificate

我从这里得到链接:https://curl.se/docs/caextract.html

你至少应该再尝试一次,但要进行证书检查,然后比较.pem文件是否相同。从技术上讲,通过这种更新程序,您已经失去了正确检查.pem存储是否合法的机会。这会影响所有使用该存储的应用程序。 - hakre
这就是问题所在:事实上,它并不仅限于Composer。我已经更新了答案。 - CharlesM
当然(或者更好的说法是:这是我之前阅读你的答案的方式),这就是--no-check-certificate的“原因”(wget(1)也受到了影响),但是考虑到系统上的证书存储已经损坏,如何解决?在没有验证的情况下替换它(甚至在答案中也没有进行二次检查!)对于这个问题来说似乎有点简单化了(对我来说)。这就是为什么我建议至少(快速)双重检查新文件是否合法(并且问题仍然存在,而且在同一系统上无法再次确定可读性 - 从技术上讲)。至少使用sha256sum。 - hakre
我认为建议先备份是很好的,因为这样可以事后进行检查。所以答案(也是之前的)经过了深思熟虑。(评论字数有限,因此写了第二个评论)。 - hakre

0

重新运行composer安装程序。如果我没记错的话,它会附带自己的证书存储或至少有一些备用包。

对于您的操作系统,请使用标准的更新程序。


实际上,我已经尝试重新运行安装程序了。我更新了问题。 - CharlesM
好的,Composer存储库可能仅在没有系统存储库(或PHP配置不正确)时才会出现。我有点想知道为什么会在您的系统上发生这种情况,以及系统更新过程为什么无法应对。您是否尝试通过apt/apt-get/dpkg(或类似于操作系统包管理方面的工具)重新安装?-- 关于Composer存储库,它也与MDNs'/Curls'相关。因此,对于实际证书来说,这应该是相同的类型 - 只是这样说。 - hakre

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