curl error 77 根本原因是 php curl 扩展未正确配置 ca 证书路径;需下载 cacert.pem、在 php.ini 中设置 curl.cainfo、重启 apache,并确保文件权限与路径正确,禁用 ssl 验证不安全且不被微信支付等接口接受。
apache 本身不直接导致 curl 请求第三方 https 地址时出现证书错误,但当你在 apache 托管的 php 环境(如 phpstudy、lamp)中用 curl 调用微信支付、支付宝、openapi 等接口时,报 curl error 77: error setting certificate verify locations,本质是 php 的 curl 扩展找不到或无法加载受信任的 ca 根证书文件。
确认 curl.cainfo 是否已正确配置
这是最常见且必须优先检查的环节。PHP 的 cURL 默认不自带可信根证书列表,需手动指定一个 PEM 格式的 CA 包路径。
- 从官方地址下载最新 CA 包:https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251
- 将
cacert.pem文件存放到服务器上一个稳定路径,例如:/etc/ssl/certs/cacert.pem(Linux)或G:\PhpStudy\phpstudy_pro\Extensions\php\php8.1.0nts\ext\cacert.pem(Windows phpStudy) - 编辑
php.ini,在末尾添加(注意路径使用英文双引号,且路径中反斜杠需转义或改用正斜杠):[curl]<br>curl.cainfo = "/etc/ssl/certs/cacert.pem"
- 保存后重启 Apache(或 PHP-FPM),执行
php -i | grep curl.cainfo验证是否生效
检查系统级 CA 证书是否过期或缺失
部分 Linux 发行版(如 Ubuntu 20.04)若长期未更新,系统内置的 CA 证书包可能陈旧,导致 curl 底层调用失败。
基于5000余部现行法律法规进行的高质量专业合同审查,一键输出审查意见书,并附有参考法条原文,满足专业溯源核查要求。由accurLex知法提供技术支持。 Use when users ask for 合同审查, 审查意见书, 合同风险分析, 条款审查,知法,accurLex or 站在甲方/乙方角度审查合同 through accurLex direct API. China law only, plaintext only, review mode limited to 审查意见书.
- 运行命令更新系统证书:
sudo apt update && sudo apt install -y ca-certificates - 验证符号链接是否指向有效证书:
ls -l /etc/ssl/certs/ca-certificates.crt
应指向/etc/ssl/certs/ca-bundle.trust.crt或类似可信路径 - 如链接损坏,可重建:
sudo update-ca-certificates
避免在代码中禁用 SSL 验证
虽然设置 CURLOPT_SSL_VERIFYPEER => false 能跳过报错,但这会完全关闭证书校验,使通信暴露于中间人攻击风险,生产环境严禁使用。
- 仅限本地开发调试临时启用,且必须加注释说明
- 微信支付、银联等接口明确拒绝此类请求,禁用后反而导致业务逻辑失败
- 真正安全的做法是修复证书路径,而非绕过验证
验证 PHP 运行用户是否有读取权限
即使路径写对,若 Apache 工作进程(如 www-data、apache、daemon)无权读取 cacert.pem 文件,仍会报错 77。
- 检查文件权限:
ls -l /etc/ssl/certs/cacert.pem
推荐权限为-rw-r--r--(644) - 必要时调整:
sudo chmod 644 /etc/ssl/certs/cacert.pemsudo chown root:root /etc/ssl/certs/cacert.pem - 若放在 Web 目录下,确保不在可被 HTTP 直接访问的路径中(如不放
/var/www/html/下)










