如何修复PHP Curl请求本地127.0.0.1时自签名SSL证书连接错误问题
报错核心原因
本地127.0.0.1:2288服务使用自签证书,你所用的公共CA根证书包仅包含全球可信机构的根证书,不会覆盖你自行生成的自签证书,因此SSL校验不通过。
可行解决方案(均保留SSL校验逻辑,无需关闭校验)
- 将自签证书加入系统可信CA存储
把你本地服务的自签根证书(.crt格式)放到/usr/local/share/ca-certificates/目录下,执行命令sudo update-ca-certificates,Ubuntu会自动将该证书加入系统可信根证书列表,后续PHP、curl发起请求时都会信任该证书。 - 单独指定自签证书作为校验依据
修改curl代码中CURLOPT_CAINFO的配置值,不再指向公共的cacert.pem,而是改为你本地服务自签证书的绝对路径,示例:
该方式仅信任指定的自签证书,安全性更高,也不需要修改系统配置。curl_setopt ($ch, CURLOPT_CAINFO, "/path/to/your/self_signed_cert.crt"); - 检查自签证书的SAN字段配置
新版curl和PHP对SSL证书的校验要求服务端证书的*主题备用名称(SAN)*字段必须包含请求的目标地址,你当前请求的是127.0.0.1,生成自签证书时必须将127.0.0.1加入SAN字段,仅在CN(通用名称)字段填写127.0.0.1会导致主机名校验失败。 - 清理无效PHP配置
你php.ini中的extension=php_curl.dll是Windows平台的curl扩展配置,Ubuntu环境下不需要该行,建议删除避免出现扩展加载警告。 - 检查证书文件读取权限
确保PHP运行用户(通常为www-data)对你配置的证书文件有可读权限,可通过命令chmod 644 /path/to/cert/file赋予全局可读权限,避免curl因无法读取证书文件导致校验失败。
内容的提问来源于stack exchange,提问作者serbe204
相关产品推荐
相关产品推荐

