cURL error 60: SSL certificate problem: unable to get local issuer certifica
解决方法
下载一个 ca-bundle.crt,放到对应的目录,在 php.ini 文件中配置下路径
https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
在 php.ini 加入,重启 web 服务器
curl.cainfo=” 真实路径 /ca-bundle.crt”
注意在修改 php.ini 的 curl.cainfo 时候 路径一定要是 绝对路径, 不然会报如下错误
cURL error 77: error setting certificate verify locations
解决方法详细设置说明
转贴自:https://www.flowus.cn/uyevan/share/7eac6a70-3ca6-439a-94d4-fd9dbf6abd09
问题描述
在使用 PHP 的 cURL 功能访问 HTTPS 接口时(如微信 API、阿里云 API 等),经常会遇到以下 SSL 证书相关的错误:
cURL error 60: SSL certificate problem: unable to get local issuer certificate
或
cURL error 77: error setting certificate verify locations:
CAFile: [path]/cacert.pem
CApath: none
这些错误通常出现在以下场景:
- 调用微信支付接口
- 使用阿里云 SDK(如短信服务)
- 访问其他需要 SSL 验证的 HTTPS 接口
原因分析
这个问题的根本原因是 PHP 的 cURL 模块在进行 HTTPS 请求时,需要验证服务器证书的有效性,但找不到用于验证的根证书文件(CA 证书)。具体可能是由于:
- 系统中没有配置 CA 证书文件
- CA 证书文件路径配置不正确
- PHP 无法访问证书文件
- OpenSSL 扩展未启用
解决方案
方案一:安装和配置 CA 证书(推荐)
- 下载 CA 证书
- 访问官方证书下载页面:https://curl.se/docs/caextract.html
- 下载最新版本的
cacert.pem
文件
- 放置证书文件
- 在 PHP 安装目录下创建 cert 目录:
[PHP 安装路径]/cert/
- 将下载的
cacert.pem
复制到该目录
- 配置 PHP
- 打开 php.ini 文件
- 找到
curl.cainfo
配置项 - 去掉注释符号(;)
- 设置证书路径,例如:curl.cainfo = “D:/php/cert/cacert.pem”
- 同时设置 openssl 证书路径:openssl.cafile = "D:/php/cert/cacert.pem"
注意:路径分隔符使用正斜杠(/),不要使用反斜杠()
- 重启服务
- 重启 PHP-FPM 或 Apache/Nginx 服务
- 如果使用的是集成环境(如 XAMPP、WAMP),重启整个服务
方案二:临时禁用 SSL 验证(仅用于开发测试)
在代码中添加以下设置:
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
如果使用框架或 SDK:
// EasyWechat 配置
'http' => ['verify' => false]
// 阿里云 SDK 配置
$request->setVerifyPeer(false);
⚠️ 警告:此方案会降低安全性,不建议在生产环境使用。
正文完
有偿技术支持加微信

发表至: PHP编码
2023-08-29