Mac Catalina系统OpenSSL报certificate verify failed错解决方案咨询
核心问题答疑
- 需调用新版SSL/修复证书问题的组件是MAMP集成的PHP:Laravel、SwiftMailer均为上层组件,仅调用PHP内置的
stream_socket系列函数执行SSL连接;MAMP自带的PHP为独立编译版本,默认绑定自带的SSL库、使用内置的CA证书包,不会读取系统PATH中你自行安装的LibreSSL,也不会默认使用你修改后的系统证书,这是你之前操作无效的核心原因。 - 最优解决方案不需要替换SSL库,直接修正PHP读取的CA证书包即可,操作成本极低。
可执行解决方案
最优方案:修正PHP CA证书配置(二选一即可)
全局生效(修改MAMP PHP配置)
- 先安装最新CA证书包:执行
brew install ca-certificates - 找到你当前使用的MAMP PHP版本对应的
php.ini文件,默认路径为/Applications/MAMP/bin/php/php<你的版本号>/conf/php.ini - 修改两个配置项的取值为brew安装的CA证书路径:
curl.cainfo = "/usr/local/etc/ca-certificates/cert.pem" openssl.cafile = "/usr/local/etc/ca-certificates/cert.pem"
- 重启MAMP的Web服务即可生效。
项目级生效(仅修改Laravel配置,不需要动全局环境)
打开项目config/mail.php文件,在SMTP配置块中新增SSL流配置:
'mailers' => [ 'smtp' => [ // 原有的host、port、username、password等配置保持不变 'stream' => [ 'ssl' => [ 'verify_peer' => true, 'verify_peer_name' => true, 'cafile' => '/usr/local/etc/ca-certificates/cert.pem', ], ], ], ],
保存后执行php artisan config:clear清空配置缓存即可生效。
备选方案:替换MAMP PHP使用的SSL库
如果必须使用你安装的新版LibreSSL,可按以下步骤操作:
- 执行
brew install php@<你的项目PHP版本号> --with-libressl,编译PHP时指定使用新版LibreSSL - 打开MAMP偏好设置,进入「PHP」标签,选择自定义PHP版本,路径指定为brew安装的PHP路径(默认路径为
/usr/local/opt/php@<版本号>/bin/php) - 重启MAMP服务即可。
临时应急方案(仅本地调试可用,禁止用于生产)
如果只是临时测试功能,可以暂时关闭SSL证书校验,在上述Laravel的SMTP流配置中将verify_peer和verify_peer_name设为false即可。
内容的提问来源于stack exchange,提问作者wanderlusted
相关产品推荐
相关产品推荐

