共计 590 个字符,预计需要花费 2 分钟才能阅读完成。
开发时候,突然遇到一直好好的一个服务无法获取数据,本地测试怎么都正常,经过逐一排查之后,发现是系统报了这个错误:
curl: (60) SSL certificate problem: certificate has expired
检查一下域名的 SSL 证书也没问题,访问都正常,并没有到期。
后来是发现本地的 CA 证书过期,Curl 请求调用时候就直接嗝屁了,线上只返回个 false 就很迷惑,下面来给解决办法:
有两个办法,如果你是 laravel 的引用,可以直接加一个参数即可:
$response = Http::withOptions([
'verify' => false,
])->get('http://example.com/users');
但是这种方法,每个请求都要添加参数,并不优雅,此时可以对 CA 证书进行替换:
下载地址:curl – Extract CA Certs from Mozilla
下载之后,打开 PHP 的配置文件,php.ini
搜索:curl 配置,找到 curl.cainfo 配置项
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = /etc/pki/tls/certs/ca-bundle.crt
【宝塔路径如上,其他环境请按照具体路径查找】
将下载的新证书内容替换即可。
正文完
加入官方交流QQ群:778957856

路过,踩一下!
友链已加 :)