我尝试在社区版中使用MongoDB的客户端文件级加密功能。我对自动加密功能不感兴趣。但是,我们需要自动解密功能,根据文档,社区版也可以使用该功能。
我们通常在我们的应用程序中使用mongoose,但我也尝试了原生nodejs驱动程序。下面是我用来创建连接的代码。如果我注解掉 * autoEncryption * 对象,这可以正常工作。这样做允许我手动加密,但这样我们也必须手动解密,这有点违背目的。
一些文档建议将bypassAutoEncryption:true和extraOptions对象添加到 autoEncryption 对象中。我已经这样做了,如下所示。
const secureClient = new MongoClient('mongodb://someUri', {
useNewUrlParser: true,
useUnifiedTopology: true,
autoEncryption: {
keyVaultNamespace,
kmsProviders,
bypassAutoEncryption: true,
extraOptions: {
// mongocryptdBypassSpawn: true,
mongocryptdSpawnArgs: [ "--pidfilepath=bypass-spawning-mongocryptd.pid", "--port", "27021"],
mongocryptdURI: "mongodb://localhost:27021/db?serverSelectionTimeoutMS=1000"
},
}
});
字符串
我的代码一直在工作,直到生成主密钥,数据密钥和显式加密数据。不幸的是,我还没有能够设置自动解密。要使用CSFLE选项配置客户端,必须在选项中传递 * autoEncryption*。但每当我传递此选项时,我都会得到以下异常
(node:53721) UnhandledPromiseRejectionWarning: MongoServerSelectionError: connect ECONNREFUSED 127.0.0.1:27021
at Timeout._onTimeout (/Users/NiccsJ/ORI/code/testmongoEncryption/node_modules/mongodb/lib/sdam/topology.js:325:38)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7)
(Use `node --trace-warnings ...` to show where the warning was created)
型
我几乎遵循了下面参考文献中的所有建议。令人惊讶的是,mondodb-nodejs文档甚至没有提到bypassAutoEncryption。我只是偶然发现了mongodb-c(下面的第3和第4点)驱动程序文档,在那里我第一次发现了这样一个选项的ant参考。
- https://github.com/mongodb/node-mongodb-native/blob/4ecaa37f72040ed8ace6eebc861b43ee9cb32a99/test/spec/client-side-encryption/tests/README.rst
- https://github.com/Automattic/mongoose/issues/8167的
- http://mongocxx.org/mongocxx-v3/client-side-encryption/的
- https://mongodb.github.io/mongo-csharp-driver/2.11/reference/driver/crud/client_side_encryption/#explicit-encryption-and-auto-decryption
我能够配置mongoShell与自动解密,这意味着我的初始设置是没有错的。此外,它让我相信,必须有一种方法来做到这一点。通过代码以及。
我的筹码:
- nodeJS:> 14.7
- mongoDB:4.4
- 操作系统:macOS for dev,prod will be on AmazonLinux 2
- 驱动程序:mongoose,native-nodejs,mongodb-client-encryption
文档中没有明确提到,但据我所知,自动解密并不需要企业专用的mongocryptd进程。
在官方mongoDB-c-driver中提到
尽管自动加密需要MongoDB 4.2企业版或MongoDB 4.2 Atlas集群,但所有用户都支持自动解密。要配置自动解密而不自动加密,请在options::auto_encryption类中设置bypass_auto_encryption=True。
我相信bypassAutoEncryption选项正是为此目的而设计的。
1条答案
按热度按时间o7jaxewo1#
不完全是一个答案,但这是目前最好的解决方案。我在官方JIRA上报告了这个错误。
结果,这显然是一个带有node-mongo-native库的bug。根据他们的评论,这应该在下一个版本中得到修复。