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

在HTTPS服务器部署Twilio SMS遇SSL版本错误,求排查方案

Twilio SMS部署到HTTPS服务器后出现SSL版本错误排查思路

问题背景

本地HTTP环境下基于NodeJS(v16.13.1)集成的基础Twilio SMS功能运行正常,但部署到HTTPS staging服务器后出现如下SSL错误:

[Error: 140251391358848:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
] {
  library: 'SSL routines',
  function: 'ssl3_get_record',
  reason: 'wrong version number',
  code: 'ESOCKET',
  command: 'CONN'
}

服务器上其他SSL连接均正常,通过curl https://api.twilio.com/ -v测试也能正常访问Twilio API。

实现代码

const Twilio = require('twilio');

this.twilioClient = new Twilio(accountSID, authToken);
this.twilioClient.messages
    .create({
        body: textBody,
        to: recipientPhone,
        from: this.twilioConfig.sendingNumber
    })
    .then((message) => logger.log(`SMS Sent: messageId: ${message.sid}`))
    .catch((err) => logger.log(`Error sending SMS: ${err}`))

环境版本

  • NodeJS v16.13.1
  • Twilio ^3.80.0

已尝试的Apache SSL配置

#  SSLProtocol all -SSLv2
#  SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
  SSLProtocol all +TLSv1.2

每次修改配置后都重启了Apache,但问题仍未解决,Twilio官方表示仅支持TLSv1.2,已专门启用该版本。

排查思路

1. 区分Apache与NodeJS的SSL配置

Apache的SSL配置是针对服务器对外提供HTTPS服务的,而NodeJS应用发起Twilio API请求属于客户端SSL连接,两者配置相互独立。需单独确认NodeJS自身的TLS版本设置:

  • 在代码中强制指定TLSv1.2版本,修改Twilio客户端初始化逻辑:
const Twilio = require('twilio');
const https = require('https');

const tlsAgent = new https.Agent({
  secureProtocol: 'TLSv1_2_method',
  minVersion: 'TLSv1.2'
});

this.twilioClient = new Twilio(accountSID, authToken, {
  httpClient: new Twilio.HttpClient(tlsAgent)
});
  • 验证NodeJS默认TLS版本:在服务器执行node -e "console.log(require('tls').DEFAULT_MIN_VERSION, require('tls').DEFAULT_MAX_VERSION)",确认输出包含TLSv1.2。若默认版本过低,可通过环境变量NODE_OPTIONS=--tls-min-v1.2启动Node应用。

2. 排查代理/防火墙拦截

虽然curl能正常访问Twilio API,但NodeJS应用可能走了不同的代理路径:

  • 检查Node应用是否配置了HTTP_PROXY/HTTPS_PROXY环境变量,若有,确认代理服务器支持TLSv1.2,且未篡改SSL连接。
  • 排查服务器防火墙是否对Node应用的出站请求做了SSL拦截(如透明代理、SSL解密),这类设备可能强制使用旧版TLS协议。

3. 升级Twilio客户端版本

当前使用的Twilio ^3.80.0版本发布于2022年,可能存在特定环境下的SSL兼容问题:

  • 执行npm update twilio升级到最新稳定版,新版本可能修复了TLS连接相关的bug。
  • 查看Twilio Node SDK更新日志,确认是否有针对TLS握手的修复记录。

4. 检查服务器OpenSSL版本

NodeJS的SSL依赖系统OpenSSL库,执行openssl version检查版本,确保不低于1.0.1g(TLSv1.2的最低要求版本)。若版本过低,需升级OpenSSL后重启Node应用。

5. 开启SSL调试日志

在代码中添加调试参数,捕获TLS握手细节:

// 仅调试用,生产环境请勿开启
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
process.env.NODE_DEBUG = 'tls';

// 原Twilio代码保持不变

启动应用后查看调试输出,确认TLS握手阶段是否使用了正确的协议版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:48:24