Express+TypeScript连接SQL Server遇ConnectionError问题求助
解决mssql+tedious连接SQL Server Express时的SSL协议不支持错误
问题详情
基于Express+TypeScript搭建Web API,使用mssql包及默认tedious驱动连接本地SQL Server Express,配置代码如下:
{ server: 'localhost/SQLEXPRESS01', options: { encrypt: true, trustServerCertificate: true } }
调用数据库操作时触发ConnectionError,具体错误信息:
ConnectionError: 无法连接到 localhost/SQLEXPRESS01:1433 - FC0B0000:error:0A000102: SSL routines:ssl_choose_client_version:不支持的协议:openssl\ssl\statem\statem_lib.c:2379:
已执行以下排查操作但问题未解决:
- 启用SQL Server的TCP/IP和命名管道协议
- 防火墙添加
sqlserver.exe及1433端口的入站允许规则 - 启用SQL Browser Service并重启SQL Server服务
解决方案
1. 指定兼容的SSL/TLS协议版本
错误核心是SSL协议版本不兼容——新版Node.js/OpenSSL默认禁用了旧版TLS协议(如TLSv1.0),而SQL Server Express可能仅支持这些旧协议。在连接配置的options.tls中显式声明允许的协议范围:
{ server: 'localhost\\SQLEXPRESS01', options: { encrypt: true, trustServerCertificate: true, tls: { minVersion: 'TLSv1', maxVersion: 'TLSv1.2' } } }
可根据SQL Server实际支持的版本调整,优先推荐使用TLSv1.2(若服务器支持)。
2. 修正服务器名称格式
SQL Server实例名称需使用反斜杠分隔,原配置中的正斜杠会导致解析错误,修正为:
server: 'localhost\\SQLEXPRESS01' // 字符串中转义反斜杠 // 或使用模板字符串 server: `localhost\\SQLEXPRESS01`
3. 临时关闭加密(仅本地开发)
若为本地开发环境,可临时关闭加密跳过SSL验证(生产环境禁止此操作):
{ server: 'localhost\\SQLEXPRESS01', options: { encrypt: false, trustServerCertificate: true } }
4. 检查SQL Server SSL配置
打开SQL Server配置管理器:
- 导航至「SQL Server网络配置」→「你的实例协议」→「TCP/IP」→「属性」→「证书」
- 确认SSL证书配置正确,或取消「强制加密」选项(若无需强制加密)
内容的提问来源于stack exchange,提问作者whatwhatwhat
相关产品推荐
相关产品推荐

