CURL报错:未找到SSL证书文件问题

☠️ 错误问题

0 cURL error 77: error setting certificate file: /opt/homebrew/etc/openssl@3/cert.pem (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)

🧐 错误原因分析

这个 curl: (77) error setting certificate file 错误,通常是因为 curl 在指定的路径下找不到有效的SSL证书文件

查找证书是否存在:

bash 复制代码
ls -l /opt/homebrew/etc/openssl@3/cert.pem

查询结果:

bash 复制代码
ls: /opt/homebrew/etc/openssl@3/cert.pem: No such file or directory //文件不存在

🛠️ 解决方案

1.http请求是关闭证书方案

PHP 原生 cURL 关闭 SSL 校验

php 复制代码
$ch = curl_init($url);
// 核心两行关闭SSL校验
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不校验服务端证书合法性
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不校验证书域名匹配
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']);
$resp = curl_exec($ch);
curl_close($ch);

PHP GuzzleHttp 关闭证书校验

方式 1:客户端全局关闭(该实例所有请求生效)

php 复制代码
use GuzzleHttp\Client;
$client = new Client([
'verify' => false, // 一键关闭SSL校验
]);
$res = $client->get($url);

方式 2:仅单次请求关闭

php 复制代码
$client = new Client();
$res = $client->get($url, [
    'verify' => false
]);

2.本地存在证书处理方案

查找证书:

bash 复制代码
ls -l $(brew --prefix ca-certificates)/share/ca-certificates/cacert.pem

查询结果:

bash 复制代码
/opt/homebrew/opt/ca-certificates/share/ca-certificates/cacert.pem

证书存在推荐两种方案:

方案一:设置环境变量 :编辑你的 Shell 配置文件(~/.zshrc~/.bash_profile),加入下面这行:

bash 复制代码
export SSL_CERT_FILE=$(brew --prefix ca-certificates)/share/ca-certificates/cacert.pem

保存后,执行 source ~/.zshrc 让配置生效。这样,所有遵循 SSL_CERT_FILE 环境变量的程序(如 Python、Node.js 等)都能自动找到正确的证书文件。

方案二:手动创建软链接 :如果你希望 OpenSSL 的默认目录里有一个 cert.pem,可以手动创建软链接:

bash 复制代码
ln -sf $(brew --prefix ca-certificates)/share/ca-certificates/cacert.pem /opt/homebrew/etc/openssl@3/cert.pem

3.手动下载证书更新

  1. curl - Extract CA Certs from Mozilla 下载 cacert.pem 文件。

  2. 将其复制到目标位置:

bash 复制代码
sudo cp ~/Downloads/cacert.pem /opt/homebrew/etc/openssl@3/cert.pem

知识点补充

1.基于MacBook M芯片openssl扩展安装

在多数开发环境中,OpenSSL 作为基础加密库被广泛依赖,可能你电脑安装mysql、redis、php等已经将OpenSSL安装成功,检测OpenSSL是否安装:

bash 复制代码
openssl -v 

操作过程:

bash 复制代码
# 安装成功提示版本信息
OpenSSL 3.5.0 8 Apr 2025 (Library: OpenSSL 3.5.0 8 Apr 2025)

未安装推荐homebrew进行安装:

bash 复制代码
# 搜索openssl扩展
brew search opnessl
查看openssl扩展信息
brew info openssl@3
安装openssl扩展(安装3.x)
brew install openssl@3

openssl详细信息:

bash 复制代码
==> openssl@3 ✔: stable 3.5.0 (bottled)
Cryptography and SSL/TLS Toolkit
https://openssl-library.org
Installed
/opt/homebrew/Cellar/openssl@3/3.5.0 (7,563 files, 37MB) *
  Poured from bottle using the formulae.brew.sh API on 2026-02-04 at 14:49:48
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/o/openssl@3.rb
License: Apache-2.0
==> Dependencies
Required: ca-certificates ✔
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /opt/homebrew/etc/openssl@3/certs
and run
/opt/homebrew/opt/openssl@3/bin/c_rehash
==> Downloading https://mirrors.aliyun.com/homebrew/homebrew-bottles/api/formula/openssl@3.json
==> Analytics
install: 472,664 (30 days), 1,249,026 (90 days), 5,076,655 (365 days)
install-on-request: 82,242 (30 days), 195,745 (90 days), 699,420 (365 days)
build-error: 9,420 (30 days)

安装后路径:

  1. M芯片必须用/opt/homebrew/opt/openssl@3路径

  2. Intel芯片用/usr/local/opt/openssl@3路径

相关推荐
geovindu1 小时前
go:loghelper
开发语言·后端·golang
听雨入夜2 小时前
zero.zhang
开发语言·python
江屿风2 小时前
【C++笔记】【二叉搜索树】流食般投喂
开发语言·数据结构·c++·笔记
1001101_QIA2 小时前
VRChat 插件开发方式
开发语言·vr
会编程的土豆3 小时前
GoWeb 处理请求详解:请求行、请求头、请求参数与给客户端响应
开发语言·http·golang
严谨的麻辣烫9 小时前
Linux sysctl 网络参数调优实战:高并发与长连接场景下的内核配置
linux·网络·php
name好难取诶12 小时前
PHP 静态分析工具实战 PHPStan 和 Psalm 完全指南
android·开发语言·php
湿滑路面13 小时前
Rouyan:使用WPF/C#构建的基于LLM的快捷翻译小工具
开发语言·c#·wpf
Lee_jerome13 小时前
《C/C++编译全家桶:g++四阶段、.a与.so区别、CMake构建、ARM交叉编译,这篇全讲透了》
c语言·开发语言·arm开发·c++·编译·cmake·cmakelists