Composer在macOS报OpenSSL错误的核心原因是PHP未正确链接可用的OpenSSL库或证书路径配置缺失;需确认PHP版本与OpenSSL版本一致,通过Homebrew重装PHP并配置php.ini中的openssl.cafile指向Homebrew证书路径。

Composer 在 macOS 上报 OpenSSL 相关错误(比如 cURL error 60: SSL certificate problem 或 Unable to load dynamic library 'openssl'),通常是因为系统自带的 OpenSSL 被禁用、Homebrew 安装的 OpenSSL 未被 PHP 正确识别,或 PHP 编译时链接了旧版/不兼容的 OpenSSL 库。解决核心是让 PHP 的 OpenSSL 扩展指向一个可用且匹配的 OpenSSL 版本。
确认当前 PHP 和 OpenSSL 状态
先检查你实际在用的 PHP 版本和它的 OpenSSL 配置:
- 运行
which php确认 PHP 路径(常见于/opt/homebrew/bin/php或/usr/bin/php) - 执行
php -v和php -m | grep openssl看是否加载了 OpenSSL 扩展 - 运行
php -i | grep -i "openssl"查看 OpenSSL Library Version 和 OpenSSL Header Version 是否一致,且不是0.9.8或空值 - 如果提示
OpenSSL extension is missing,说明扩展没启用;如果版本过低或不匹配,Composer 的 HTTPS 请求就会失败
重新安装并配置 Homebrew PHP(推荐方式)
macOS 不再自带可修改的 OpenSSL,Homebrew 是最可控的方案。确保使用官方维护的 PHP 版本(如 php@8.2 或更高):
- 卸载旧 PHP:
brew uninstall php@8.1 php@8.2(按需) - 安装新版 PHP:
brew install php@8.3 - 将 Homebrew 的 PHP 加入 PATH:在
~/.zshrc中添加export PATH="/opt/homebrew/bin:$PATH",然后source ~/.zshrc - 验证:
php -v应显示 8.3.x,php -i | grep -i openssl中 Library 和 Header 版本应接近(如均为 3.0.x 或 3.2.x)
手动修复 php.ini 中的 OpenSSL 设置(必要时)
即使 OpenSSL 扩展已加载,PHP 仍可能找不到证书包(cafile),导致 Composer 报 cURL 60 错误:
- 找到 php.ini:运行
php --ini,编辑输出中的 Loaded Configuration File - 搜索
openssl.cafile,取消注释并设为 Homebrew 的证书路径:
openssl.cafile=/opt/homebrew/etc/ca-certificates/cert.pem - 如果不存在该行,直接在文件末尾添加上面这行
- 重启终端或重载 shell,再试
composer diagnose,应不再报 SSL 证书错误
临时绕过(仅调试,不推荐长期使用)
如果只是想快速跑通某条命令,可临时禁用证书验证(⚠️ 有安全风险):
-
composer config -g secure-http false(关闭全局 HTTPS 强制) -
export COMPOSER_CAFILE="/opt/homebrew/etc/ca-certificates/cert.pem"(指定证书路径) - 或对单次命令跳过验证:
curl -k https://getcomposer.org/installer | php(仅限安装器)
基本上就这些。关键是让 PHP 和 OpenSSL 版本对得上,证书路径配得准。不复杂但容易忽略细节。










