0

0

怎样让php源码支持https请求_编译openssl与证书链配置【教程】

看不見的法師

看不見的法師

发布时间:2026-02-06 13:41:17

|

232人浏览过

|

来源于php中文网

原创

PHP HTTPS 请求失败主因是环境缺失或配置错位,需检查 OpenSSL/cURL 扩展启用、证书路径正确及 CA 证书链有效,禁用证书验证仅限临时调试。

怎样让php源码支持https请求_编译openssl与证书链配置【教程】

PHP 默认支持 HTTPS 请求,但前提是底层 cURL 或 OpenSSL 扩展已正确编译并链接到可用的 OpenSSL 库,且运行时能加载可信 CA 证书链。问题往往不出在 PHP 代码本身(比如 file_get_contents('https://...')curl_exec()),而在于环境缺失或配置错位。

检查 PHP 是否已启用 OpenSSL 和 cURL 支持

直接运行 php -m | grep -E '^(openssl|curl)$'。若无输出,说明对应扩展未启用;若只有 curl 没有 openssl,cURL 可能是用系统自带的 NSS 或 GnuTLS 编译的,不支持标准 PEM 证书路径,也无法验证 HTTPS 证书链。

  • 确认 extension=opensslphp.ini 中未被注释,且 extension_dir 指向正确的 .so/.dll 路径
  • 运行 php -r "print_r(openssl_get_cert_locations());" 查看 PHP 认为的默认证书路径 —— 这个路径必须存在且包含有效的 CA bundle(如 ca-bundle.crtca-certificates.crt
  • 如果输出中 default_cert_file 是空或指向不存在的文件,后续 HTTPS 请求会因“unable to get local issuer certificate”失败

重新编译 PHP 以链接自建 OpenSSL(非必要勿动)

仅当系统 OpenSSL 版本过旧(如 CentOS 7 默认 1.0.2)、或需启用 FIPS/国密等特殊特性时,才需手动编译 OpenSSL 并让 PHP 链接它。多数现代发行版(Ubuntu 22.04+、CentOS 8+)自带的 OpenSSL 1.1.1+ 已足够安全且兼容 PHP 7.4+ / 8.x。

  • 编译 OpenSSL 时加 --prefix=/usr/local/openssl,安装后确保 /usr/local/openssl/bin/openssl version 可执行
  • 编译 PHP 时指定 --with-openssl=/usr/local/openssl,而非 --with-openssl-dir(后者已被弃用)
  • 编译后运行 ldd $(php-config --extension-dir)/openssl.so | grep ssl,确认链接的是你刚装的 OpenSSL 库,而非系统旧版
  • 注意:PHP 8.2+ 不再支持 OpenSSL 1.0.x,强行链接会导致启动报错 undefined symbol: OPENSSL_sk_num

正确配置 CA 证书链(最常出问题的环节)

PHP 不读取系统级的 /etc/ssl/certs/ca-certificates.crt(除非你显式设置),也不自动从 curl.cainfoopenssl.cafile 加载 —— 它只认自己编译时硬编码的路径,或运行时通过 ini 配置覆盖。

腾讯智影
腾讯智影

腾讯推出的在线智能视频创作平台

下载

立即学习PHP免费学习笔记(深入)”;

  • 下载最新 Mozilla CA bundle:curl -o /usr/local/share/ca-bundle.crt https://curl.se/ca/cacert.pem
  • php.ini 中添加两行:
    openssl.cafile=/usr/local/share/ca-bundle.crt
    curl.cainfo=/usr/local/share/ca-bundle.crt
  • 若使用 Composer,还需设置环境变量 export COMPOSER_CAFILE=/usr/local/share/ca-bundle.crt,否则 composer install 仍可能失败
  • 重启 PHP-FPM 或 Apache 后,再次运行 php -r "print_r(openssl_get_cert_locations());",确认 default_cert_file 已更新为你指定的路径

绕过证书验证不是解决方案

CURLOPT_SSL_VERIFYPEER => falsestream_context_create([... 'verify_peer' => false ...]) 会让 HTTPS 退化为明文 HTTP 级别安全性,且现代 PHP(8.0+)在 CLI 模式下对未验证连接会触发 E_WARNING,某些云环境甚至直接拒绝执行。

  • 临时调试可用,但上线前必须移除
  • 内网自签证书场景,应把内网 CA 的 PEM 文件追加到你的 ca-bundle.crt 末尾,而不是关验证
  • openssl.cafile 支持绝对路径,不支持相对路径或 ~ 符号;路径权限需确保 PHP 进程用户(如 www-data)可读

真正卡住人的从来不是“怎么编译”,而是编译完没改 php.ini,或者改了但没重启服务,又或者证书路径写错了一级目录——这些地方一错,file_get_contents('https://api.github.com') 就会静默返回 false,连错误信息都要开 error_reporting(E_ALL) 才看得见。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

157

2023.12.25

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

445

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

179

2023.10.30

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

5503

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

3126

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

874

2025.12.25

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

1641

2026.01.21

apache是什么意思
apache是什么意思

Apache是Apache HTTP Server的简称,是一个开源的Web服务器软件。是目前全球使用最广泛的Web服务器软件之一,由Apache软件基金会开发和维护,Apache具有稳定、安全和高性能的特点,得益于其成熟的开发和广泛的应用实践,被广泛用于托管网站、搭建Web应用程序、构建Web服务和代理等场景。本专题为大家提供了Apache相关的各种文章、以及下载和课程,希望对各位有所帮助。

412

2023.08.23

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

29

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号