使用node-firebird连接本地Firebird数据库时报线加密级别不兼容错误
node-firebird连接本地Firebird触发线加密不兼容报错的排查方案
报错根因
这个报错的本质是Node.js客户端和本地Firebird服务端的线传输加密协商机制不匹配:Firebird从3.0版本开始原生支持Wire协议加密,4.0版本后默认将加密要求调高为强制加密模式;而你当前使用的node-firebird旧版本驱动默认不主动发起加密协商流程,双方在连接握手阶段对加密级别的要求无法达成一致,就会直接中断连接抛出该错误。
具体排查与解决步骤
- 先核对本地Firebird服务端的加密配置
- 打开Firebird安装目录下的
firebird.conf配置文件,找到WireCrypt配置项的当前值:- 若值为
Required:代表服务端强制要求所有连接必须走加密传输,不接收明文连接请求 - 若值为
Enabled:代表服务端支持加密/明文连接双模式,只要和客户端协商出一致的加密级别即可连接 - 若值为
Disabled:代表服务端完全关闭线加密能力
- 若值为
- 修改配置后必须重启Firebird服务,新配置才会生效
- 打开Firebird安装目录下的
- 调整Node.js驱动的连接参数,对齐服务端加密要求
- 在原有连接配置的
options对象中,新增wireCrypt参数,取值和服务端的WireCrypt配置保持一致,让客户端发起连接时能正确完成加密协商 - 修改后的连接配置示例:
const Firebird = require('node-firebird'); var options = {}; options.host = '127.0.0.1'; options.port = 3050; options.database = 'C:\\DATABASES\\PRUEBA.FDB'; options.user = 'SYSDBA'; options.password = 'password'; options.lowercase_keys = false; options.role = null; options.pageSize = 4096; // 新增加密协商参数,值和服务端WireCrypt配置匹配 options.wireCrypt = 'enabled'; Firebird.attach(options, (err, db) => { if (err) console.log(err); db.query('select * from temp', (err, response) => { if (err) console.log(err); console.log(response); }) })
- 在原有连接配置的
- 处理版本兼容问题
- 如果你本地安装的是Firebird 4.0及以上版本,注意旧版
node-firebird库(2022年之前发布的版本)没有内置Wire加密的实现逻辑,就算加了参数也可能协商失败。这种情况可以更换为维护更活跃的Firebird Node.js驱动分支,再重新测试连接
- 如果你本地安装的是Firebird 4.0及以上版本,注意旧版
- 本地临时验证方法
- 如果是本地开发测试环境,可以临时将服务端
firebird.conf的WireCrypt值调整为Enabled模式,重启服务后再尝试连接,快速定位是否是加密策略不匹配导致的问题;生产环境不建议随意降低加密等级要求。
- 如果是本地开发测试环境,可以临时将服务端
内容的提问来源于stack exchange,提问作者Joaquin Hernandez
相关产品推荐
相关产品推荐

