Node.js环境MongoDB CSFLE显式加密自动解密配置问题
MongoDB社区版CSFLE显式加密+自动解密配置解决方案
问题根源
ECONNREFUSED 127.0.0.1:27021报错的核心原因:
- mongocryptd进程是仅自动加密场景下需要的企业版组件,开启
bypassAutoEncryption: true后,自动解密场景完全不需要该进程 - 原配置中手动指定了
mongocryptdURI、mongocryptdSpawnArgs参数,驱动会主动尝试连接/启动mongocryptd进程,访问不存在的端口自然触发连接拒绝错误
修复方案
1. 修正autoEncryption配置
删掉所有mongocryptd相关的额外配置,新增mongocryptdBypassSpawn: true禁止驱动启动该进程,正确配置如下:
const secureClient = new MongoClient('mongodb://someUri', { useNewUrlParser: true, useUnifiedTopology: true, autoEncryption: { keyVaultNamespace, kmsProviders, bypassAutoEncryption: true, extraOptions: { mongocryptdBypassSpawn: true }, } });
2. 确认依赖版本匹配
必须保证驱动版本与MongoDB服务版本兼容:
- MongoDB 4.4对应Node.js原生驱动版本为4.x系列
- 配套
mongodb-client-encryption依赖版本为2.x系列,避免高版本兼容问题
3. Mongoose场景透传配置
如果使用mongoose连接,直接把autoEncryption配置放到mongoose.connect的options参数中即可:
const mongoose = require('mongoose'); await mongoose.connect('mongodb://someUri', { useNewUrlParser: true, useUnifiedTopology: true, autoEncryption: { keyVaultNamespace, kmsProviders, bypassAutoEncryption: true, extraOptions: { mongocryptdBypassSpawn: true }, } });
效果验证
配置修正后,之前通过显式加密写入的密文字段,直接调用普通查询接口即可得到明文结果,不需要手动执行解密操作,符合显式加密+自动解密的需求。
虽然自动加密需要MongoDB 4.2企业版或者MongoDB 4.2 Atlas集群,但是所有版本都支持自动解密。要配置仅自动解密不自动加密,需要在auto_encryption配置项中设置bypass_auto_encryption=True。
内容的提问来源于stack exchange,提问作者Nipun Jain
相关产品推荐
相关产品推荐

