You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PHP中CURL请求默认使用TLS 1.2版本

全局设置PHP CURL默认使用TLS 1.2的解决方案

从你的检测结果来看,当前环境里PHP的CURL默认只用到TLS 1.0,但手动指定CURLOPT_SSLVERSION=6可以正常使用TLS 1.2,下面给你几个不用重复写curl_setopt的全局解决方法:

方法1:封装全局CURL初始化函数(最安全可控)

创建一个自定义的CURL初始化函数,把默认TLS版本的设置封装进去,之后所有业务代码都调用这个函数代替原生的curl_init:

function custom_curl_init($url = null) {
    $ch = curl_init($url);
    // 强制默认使用TLS 1.2(6对应CURL_SSLVERSION_TLSv1_2)
    curl_setopt($ch, CURLOPT_SSLVERSION, 6);
    // 这里还可以添加其他你需要的全局默认选项,比如超时、SSL验证等
    // curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    return $ch;
}

使用的时候直接替换:

// 原来的代码
// $ch = curl_init('https://example.com');
// 替换成
$ch = custom_curl_init('https://example.com');
// 后续正常执行curl操作即可

这个方法的好处是不会影响其他系统或脚本的CURL行为,完全可控,也方便后续调整全局选项。

方法2:通过auto_prepend_file自动重写curl_init(无需修改业务代码)

如果你不想修改现有业务代码,可以利用PHP的auto_prepend_file配置,自动加载一个脚本重写原生的curl_init函数,自动注入TLS 1.2的设置:

  1. 创建一个全局配置脚本,比如/usr/local/php/curl_global_setup.php,内容如下:
<?php
// 保存原生curl_init的引用
$original_curl_init = 'curl_init';

function curl_init($url = null) {
    global $original_curl_init;
    // 调用原生函数创建句柄
    $ch = $original_curl_init($url);
    // 自动设置TLS 1.2
    curl_setopt($ch, CURLOPT_SSLVERSION, 6);
    return $ch;
}
?>
  1. 编辑你的PHP配置文件(php.ini,或者对应站点的php.d配置文件),添加一行:
auto_prepend_file = /usr/local/php/curl_global_setup.php
  1. 重启你的Web服务(Apache或PHP-FPM),让配置生效。

这样所有PHP脚本在执行前都会自动加载这个脚本,原生的curl_init会被替换成我们定义的函数,自动设置TLS 1.2。注意:如果有其他脚本也重写了curl_init,可能会出现冲突,建议测试后再上线。

方法3:系统级CURL配置(影响所有CURL客户端)

如果希望系统中所有使用CURL的程序(包括命令行curl和PHP的curl)都默认使用TLS 1.2,可以修改CURL的全局配置文件:

创建或编辑/etc/curlrc文件,添加以下内容:

tlsv1.2

保存后重启Web服务,PHP的CURL会读取这个配置,默认使用TLS 1.2。这个方法的缺点是会影响系统所有CURL调用,如果你只需要PHP的CURL生效,不建议用这个。

额外建议:考虑升级系统

CentOS 6.6已经是非常老旧的版本,官方早在2020年就停止了所有维护和安全更新,不仅加密协议支持有限,还存在很多安全隐患。如果条件允许,建议尽快升级到CentOS 7/8或者其他支持的发行版,从根本上解决这类兼容性和安全问题。

内容的提问来源于stack exchange,提问作者koalaok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:52:47