Node.js连接MSSQL失败:SSL协议不兼容问题求助
解决Node.js连接SQL Server的SSL协议不兼容问题
错误原因分析
报错信息里的ssl_choose_client_version:unsupported protocol明确指向SSL/TLS协议版本不兼容:
- Node.js 18.x使用的OpenSSL版本默认禁用了TLS 1.0/1.1等旧协议
- 你的SQL Server可能仅启用了旧版本TLS协议,导致双方协议版本无交集
解决方案
方案1:升级SQL Server的TLS协议版本(推荐,更安全)
- 打开SQL Server配置管理器,找到SQL Server网络配置下的对应实例协议
- 在操作系统层面(注册表或组策略)配置并启用TLS 1.2或更高版本
- 重启SQL Server服务使配置生效
方案2:修改Node.js启动参数,允许旧协议
如果暂时无法升级SQL Server,可通过启动参数让Node.js兼容旧TLS版本:
node --tls-min-v1.1 your-app.js
根据SQL Server实际启用的协议,选择--tls-min-v1.0或--tls-min-v1.1
方案3:在连接配置中指定SSL协议版本
在mssql的连接配置options中添加cryptoCredentialsDetails,强制指定兼容的SSL版本:
const configMsSql = { server:"myserver", port:myport, user:"username", password:"pass", database:"dbname", options:{ trustServerCertificate: true, cryptoCredentialsDetails: { minVersion: 'TLSv1.1' // 或'TLSv1.0',根据SQL Server配置调整 } } };
额外代码优化
你的导出方式会导致启动时自动执行连接,建议改为导出函数,避免不必要的提前执行:
// 原代码 module.exports = connectState(); // 修改为 module.exports = connectState; // 使用时:const connect = await require('./your-file')();
内容的提问来源于stack exchange,提问作者Ldev
相关产品推荐
相关产品推荐

