CentOS 8运行其它环境编译的curl报77错误解决方法

此问题来源于经过Github Actions编译出来的curl执行程序,由于actions默认的构建环境都是Ubuntu的,编译构建出来的新版本curl放到CentOS 8上运行时,会提示类似如下内容的错误(仅限需要用到ssl证书的协议,如https):

12345curl: (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 即可。