PHP cURL 解决 HTTPS SSL 证书验证失败的两种方法

清欢
清欢
发布时间:2026-10-13| 2人浏览过
原创

在使用 PHP 的 cURL 库发起 HTTPS 请求时,如果目标服务器的 SSL 证书不被本地信任或本地 CA 证书文件过期,程序会抛出 "SSL certificate problem" 错误。本文将详细说明如何通过关闭验证和配置正确的 CA 证书这两种方式来解决问题。

错误现象

当执行 cURL 请求时,如果出现以下错误信息,说明 SSL 证书验证未通过:

SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

解决方法

第1步:方法一 - 禁用 SSL 证书和主机名验证(仅限调试/内网使用)

目的: 快速绕过 SSL 验证以测试连接是否正常。此方法会降低安全性,不建议在生产环境中对公开网站使用。

操作: 在初始化 cURL 后、执行请求前,设置两个选项为 FALSE。

$ch = curl_init();
// ... 其他配置 ...

// 禁止验证SSL证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// 禁止验证SSL主机名
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

完成状态: 再次运行代码,只要网络通畅且目标服务器无其他阻断,请求应能正常返回,不再报证书错误。

第2步:方法二 - 配置正确的 CA 证书路径(推荐用于生产环境)

目的: 保持 SSL 验证开启的同时,使用最新的证书颁发机构列表来验证服务器证书,确保通信安全。

准备条件:

  • 需要下载最新的 ca-bundle.crt 或 cacert.pem 文件。官方下载地址:http://curl.haxx.se/ca/cacert.pem
  • 将该文件放置在项目目录中(例如与脚本同级的目录下)。

操作:

  1. 确保 CURLOPT_SSL_VERIFYPEER 设置为 true(这是默认值,若之前设为 false 需改回)。
  2. 使用 CURLOPT_CAINFO 指定新下载的证书文件路径。
$ch = curl_init();
// ... 其他配置 ...

// 开启SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
// 指定CA证书路径,dirname(__FILE__)获取当前脚本所在目录
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__).'/cacert.pem');

注意事项:

  • 旧版本的 PHP 或 cURL 可能包含过时的 CA 证书包,导致即使代码正确仍报错。此时手动更新 cacert.pem 是必要的。
  • 如果不确定路径是否正确,建议打印出 dirname(__FILE__).'/cacert.pem' 的实际输出进行确认。

以上两种方法可根据实际需求选择。对于涉及敏感数据或正式业务场景,强烈推荐使用方法二。

以上就是PHP cURL解决HTTPS SSL证书验证失败的详细内容,更多关于PHP cURL HTTPS开发的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。