如何在Node.js中加密与SQL Server的连接 适用加密方案有哪些
Node.js 与 SQL Server 连接加密方案及最优实践
加密连接配置方法
目前Node.js生态操作SQL Server最常用的驱动是mssql(底层基于tedious实现),按照以下步骤配置即可开启加密:
- 先确认SQL Server服务端已经配置好合法的TLS证书,生产环境建议使用公共CA或者企业私有CA签发的证书,避免用自签名证书。SQL Server 2016及以上版本默认会自动生成自签名证书用于加密,但非信任环境下不建议直接使用。
- Node.js侧连接配置中开启加密选项,参考配置代码如下:
const sql = require('mssql') const fs = require('fs') const dbConfig = { server: 'SQL Server实例地址', port: 1433, database: '目标数据库名', user: '数据库账号', password: '数据库密码', options: { // 核心配置:强制开启TLS加密 encrypt: true, // 生产环境必须设为false,开启证书合法性校验,防止中间人攻击 // 本地开发自测如果用自签名证书可以临时设为true,禁止上生产 trustServerCertificate: false, // 企业私有CA签发证书场景,需要配置根证书完成校验,公共CA签发证书无需配置此项 cryptoCredentialsDetails: { ca: fs.readFileSync('./private-ca-root.pem') } } } // 测试加密连接 async function testEncryptConnect() { try { await sql.connect(dbConfig) console.log('加密连接已正常建立') } catch (err) { console.error('连接失败:', err) } } testEncryptConnect()
最优加密方式说明
目前最优的加密方案是基于TLS 1.2及以上版本的原生端到端加密,优势如下:
- 是SQL Server官方原生支持的能力,不需要额外部署代理、网关等中间层,性能损耗极低,兼容性最好
- 全链路加密覆盖登录凭证、查询请求、返回结果等所有传输内容,完全避免明文泄露风险,符合各类数据安全合规要求
- 配置成本极低,只需要修改连接配置项即可完成开启,不需要改业务代码
注意事项
- 禁止使用TLS 1.0、TLS 1.1版本,这两个版本已经被认定存在安全漏洞,不满足安全要求
- 任何生产环境场景都不要开启
trustServerCertificate: true,该配置会跳过证书校验,攻击者可以轻松通过伪造证书实现中间人攻击窃取数据 - 如果你用的是云厂商托管的SQL Server服务(比如Azure SQL、阿里云RDS SQL Server),厂商已经默认配置了可信的公共CA证书,直接开启
encrypt: true、关闭trustServerCertificate即可,不需要额外配置证书
内容的提问来源于stack exchange,提问作者l3xoviac
相关产品推荐
相关产品推荐

