同一服务器PHP Curl调用出现SSL unexpected eof while reading错误排查
解决OpenSSL 3下PHP Curl出现
error:0A000126:SSL routines::unexpected eof while reading错误 你遇到的这个错误确实源于OpenSSL 3重新引入的防截断攻击检测机制。虽然是服务器向自身发起Curl调用,但客户端(PHP Curl)和服务端(httpd)的SSL/TLS上下文是独立的,配置不匹配就会触发该错误。结合你的环境和配置,具体排查与修复方案如下:
核心原因
你的httpd配置已严格限定允许的TLS版本(仅TLSv1.2和TLSv1.3)及对应密码套件,但PHP Curl请求未明确指定这些参数,导致客户端可能尝试使用服务端不支持的TLS版本或套件,触发OpenSSL 3的防截断检测,最终出现EOF错误。
修复步骤
1. 为PHP Curl指定TLS版本
在Curl选项中添加CURLOPT_SSLVERSION,强制使用服务端允许的TLS版本:
CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_TLSv1_3
2. 匹配服务端的密码套件
将CURLOPT_SSL_CIPHER_LIST设置为与httpd配置一致的套件列表:
CURLOPT_SSL_CIPHER_LIST => 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:AES256+EECDH:AES256+EDH'
修改后的完整Curl选项示例
CURLOPT_HTTPGET => TRUE, CURLOPT_HEADER => FALSE, CURLOPT_FAILONERROR => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 60, CURLOPT_SSL_CIPHER_LIST => 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:AES256+EECDH:AES256+EDH', CURLOPT_CAINFO => '/path/to/ca-certs.pem', CURLOPT_SSL_VERIFYPEER => TRUE, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2 | CURL_SSLVERSION_TLSv1_3
额外检查点
- 执行
php -i | grep OpenSSL,确认PHP Curl扩展编译时使用的是OpenSSL 3.0.1版本,避免版本不兼容问题。 - 查看httpd的SSL错误日志(通常路径为
/var/log/httpd/ssl_error_log),获取握手过程中的详细错误信息,辅助定位问题。 - 使用系统curl命令行工具测试,验证配置有效性:
如果命令行请求成功,说明问题确实出在PHP Curl的配置上。curl -v --tlsv1.2 --tlsv1.3 --ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:AES256+EECDH:AES256+EDH" https://your-local-domain/path
内容的提问来源于stack exchange,提问作者oucil
相关产品推荐
相关产品推荐

