此问题来源于经过Github Actions编译出来的curl执行程序,由于actions默认的构建环境都是Ubuntu的,编译构建出来的新版本curl放到CentOS 8上运行时,会提示类似如下内容的错误(仅限需要用到ssl证书的协议,如https):
curl: (77) error setting certificate verify locations:
CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
...
curl: (77) Error reading ca cert file /etc/ssl/certs/ca-certificates.crt - mbedTLS: (-0x3E00) PK - Read/write of file failed
按照网上搜到的说法,重新yum安装ca-certificates之类的都不起作用,查看/etc/ssl/certs目录,发现有如下内容:
lrwxrwxrwx 1 root root 49 Sep 22 21:54 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx 1 root root 55 Sep 22 21:54 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
于是想到是不是构建和运行系统环境配置不同所致,于是建立软连接
ln -s /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt ./ ca-certificates.crt
再次执行curl访问https网站,问题解决!
PS: 后续在K2P的OpenWRT路由器上试验curl时也遇到了类似问题,不过这次可没有/etc/pki/ca-trust里现成的证书了,参考其它OP系统解决此问题的方法,发现都是用“opkg install ca-bundle ca-certificates”来从软件源安装证书,这个貌似在K2P的官方固件上是行不通的,于是参考这里:https://www.myflv.cn/course/87.html,直接从curl官网: http://curl.haxx.se/ca/cacert.pem 下载ca证书,并复制到上面提到的同样位置:/etc/ssl/certs/ca-certificates.crt 即可。
博主友情提示:
如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。