mongoose 如何设置mongoDB的新CSFLE功能,使用nodejs显式加密隐式解密?

taor4pac  于 2024-01-08  发布在  Go
关注(0)|答案(1)|浏览(136)

我尝试在社区版中使用MongoDB的客户端文件级加密功能。我对自动加密功能不感兴趣。但是,我们需要自动解密功能,根据文档,社区版也可以使用该功能。
我们通常在我们的应用程序中使用mongoose,但我也尝试了原生nodejs驱动程序。下面是我用来创建连接的代码。如果我注解掉 * autoEncryption * 对象,这可以正常工作。这样做允许我手动加密,但这样我们也必须手动解密,这有点违背目的。
一些文档建议将bypassAutoEncryption:trueextraOptions对象添加到 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参考。

  1. https://github.com/mongodb/node-mongodb-native/blob/4ecaa37f72040ed8ace6eebc861b43ee9cb32a99/test/spec/client-side-encryption/tests/README.rst
  2. https://github.com/Automattic/mongoose/issues/8167
  3. http://mongocxx.org/mongocxx-v3/client-side-encryption/
  4. 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选项正是为此目的而设计的。

o7jaxewo

o7jaxewo1#

不完全是一个答案,但这是目前最好的解决方案。我在官方JIRA上报告了这个错误。
结果,这显然是一个带有node-mongo-native库的bug。根据他们的评论,这应该在下一个版本中得到修复。

相关问题