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

使用sails lift启动后端时出现node:internal/process/promises:279错误的排查求助

Sails.js启动时EPROTO SSL版本错误的分析与调试

执行sails lift启动后端服务时反复出现以下错误,升级Node.js从16到19版本后问题仍未解决:

node:internal/process/promises:279
            triggerUncaughtException(err, true /* fromPromise */);
            ^
Error: write EPROTO 140704339895488:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
    at WriteWrap.onWriteComplete [as oncomplete] (node:internal/stream_base_commons:94:16) {
  errno: -100,
  code: 'EPROTO',
  syscall: 'write'
}

错误含义

这个错误本质是SSL/TLS协议版本不匹配:Node.js在发起SSL握手或传输数据时,接收到了不符合当前协商SSL版本的数据包。比如你的服务要求用TLS 1.2连接,但对方返回了SSL 3.0格式的响应,或者反过来,OpenSSL的ssl3_get_record模块检测到版本号不匹配,就会抛出该错误。

调试方法

  • 检查Sails的SSL配置:查看config/ssl.js或对应环境配置文件(如config/env/development.js)中的SSL设置,确认是否强制了特定SSL版本(如TLSv1.0),而目标服务不支持;同时验证证书、密钥文件路径是否正确,配置错误会直接导致SSL握手失败。
  • 排查外部依赖的SSL兼容性:如果Sails启动时需要连接外部HTTPS服务(如API、数据库),确认这些服务支持的SSL/TLS版本。Node.js 16+默认禁用了TLS 1.0/1.1等旧版本,若依赖服务仅支持旧版本,可通过启动参数开启兼容:修改启动命令为node --tls-min-v1.0 app.js,或在package.json的start脚本中改为sails lift -- --tls-min-v1.0。
  • 验证本地SSL证书:如果使用自签名证书做本地开发,确认证书未过期、格式正确,可临时设置NODE_TLS_REJECT_UNAUTHORIZED=0测试是否是证书信任问题(注意:生产环境禁止使用该参数)。
  • 切换到Node.js LTS版本:Node.js 19是非LTS版本,可能存在兼容性问题,建议切换到18.x LTS版本,Sails对LTS版本的适配更稳定。
  • 检查端口协议是否混淆:确认是否把HTTPS端口和HTTP端口搞混,比如配置了SSL但实际用HTTP端口监听,或反向,导致协议不匹配触发版本错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:50:44