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

生产环境间歇性cURL error 35 SSL问题排查求助

间歇性cURL SSL内部错误(tlsv1 alert internal error)诊断与解决建议

错误示例

[2024-07-08 17:50:06] production.ERROR: cURL error 35: OpenSSL/1.1.1w: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error for https://backend/xxxxxxxxxxxxxxxxxxxxx

问题概述

  • 错误全天随机出现,持续时长1-10分钟不等,发生时所有路由均受影响,后端完全无法访问
  • 尝试通过Laravel的withoutVerifying()参数绕过SSL证书验证,未解决问题

环境与补充细节

  • 错误与应用峰值使用时段无关
  • 使用OpenSSL 1.1.1w版本
  • 应用部署于共享主机环境

已尝试的无效操作

  • 禁用路由SSL证书验证——无效
  • 检查服务器日志并监控网络流量,未发现异常模式
  • 续签SSL证书(证书未过期)

诊断与解决建议

1. 排查共享主机SSL服务稳定性

共享主机多站点共用SSL服务进程,进程重启、配置重载或资源过载会触发这类内部错误:

  • 联系主机提供商,确认是否存在SSL服务(如Nginx/Apache)的间歇性重启、进程崩溃或资源耗尽情况
  • 要求提供商检查TLS协议版本配置,确保客户端与后端服务的TLS版本兼容(避免混用老旧协议与TLS1.2+)

2. 强制cURL的TLS版本与加密套件

问题不在证书信任链,而是握手阶段的协议/套件协商失败,在Laravel请求中强制指定参数:

use Illuminate\Support\Facades\Http;

$response = Http::withOptions([
    'verify' => true,
    'curl' => [
        CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2,
        CURLOPT_SSL_CIPHER_LIST => 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256',
    ],
])->get('https://backend/your-endpoint');

3. 手动测试后端SSL握手

错误发生时,在服务器上执行以下命令,获取握手过程的详细日志,定位具体失败环节:

openssl s_client -connect backend:443 -tls1_2

4. 排查共享主机网络层干扰

共享主机的防火墙、反向代理可能存在间歇性限流或拦截:

  • 要求主机提供商检查是否有针对出站SSL请求的规则触发
  • 测试切换到备用后端端点(若存在),排除单一后端的异常

5. 验证cURL与OpenSSL版本兼容性

执行以下命令确认两者版本匹配,不兼容会导致握手异常:

php -i | grep "cURL version"
php -i | grep "OpenSSL version"

若版本不匹配,联系主机提供商更新或调整依赖库版本


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:10:10