Node.js连接SQL Server报错:SSL协议不兼容问题排查
解决Node.js v19.6.0连接SQL Server时的SSL协议不支持错误
你遇到的ssl_choose_client_version:unsupported protocol错误,核心原因是目标SQL Server实例SVGGNAPP17\SQLEXPRESS使用了Node.js 19默认禁用的旧版SSL/TLS协议(比如TLS 1.0或1.1),而其他正常连接的服务器应该已经启用了TLS 1.2及以上版本。
以下是几种可行的解决方法:
方法1:通过Node.js启动参数放宽TLS版本限制
Node.js 19默认将最低TLS版本设为1.2,你可以在启动应用时添加参数,允许客户端使用更低版本的协议:
node --tls-min-v1.1 your-app-entry-file.js
如果TLS 1.1还是不行,尝试用--tls-min-v1.0(不推荐长期使用,因为旧协议存在安全风险)。
方法2:升级目标SQL Server的SSL协议版本(最优解)
如果有权限操作目标SQL Server,建议直接启用TLS 1.2,这是最安全的方案:
- 打开SQL Server配置管理器,依次展开
SQL Server网络配置->[你的实例名]的协议,确保TCP/IP已启用。 - 右键
TCP/IP选择属性,切换到IP地址标签,拉到最底部找到SSL部分,将强制加密设为是,并选择合适的SSL证书(如果没有可生成自签名证书)。 - 打开注册表编辑器(谨慎操作),定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2:- 确保
Client和Server子项存在,将它们的Enabled值设为1,DisabledByDefault值设为0。
- 确保
- 重启SQL Server服务,之后Node.js即可用默认TLS 1.2协议正常连接。
方法3:在连接配置中指定TLS版本
直接在mssql的连接配置里添加TLS选项,不需要修改启动参数:
const config = { server: "SVGGNAPP17\\SQLEXPRESS", database: "***", user: "***", password: "***", options: { trustServerCertificate: true, trustedConnection: true, encrypt: true, tlsOptions: { minVersion: 'TLSv1.1' // 根据服务器实际支持的版本调整,可选'TLSv1.0' } }, };
另外,建议确认目标实例的端口号(SQLEXPRESS默认可能用动态端口),在配置中添加port字段指定实际端口,避免连接时端口识别错误。
内容的提问来源于stack exchange,提问作者Manan
相关产品推荐
相关产品推荐

