首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置mongoDB的新CSFLE功能,使用nodejs进行显式加密隐式解密?

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

Stack Overflow用户
提问于 2021-09-03 19:06:37
回答 1查看 435关注 0票数 1

我试图在社区版中使用MongoDB的客户端文件级加密功能。我对自动加密功能不感兴趣。然而,我们需要自动解密功能,这是根据文档是可能的,在社区版。

我们通常在应用程序中使用mongoose,但我也尝试过使用本机nodejs驱动程序。下面是我用来创建连接的代码。如果我注释掉autoEncryption对象,这就很好了。这样做可以让我手动加密,但这样的话,我们也必须手动解密,哪种方式比目的更好。

一些文档建议在autoEncryption对象中添加bypassAutoEncryption: true with extraOptions对象。我看过了,下面也看到了。

代码语言:javascript
复制
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。但是,每当我通过这个选项时,我就会得到以下异常

代码语言:javascript
复制
(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. encryption/#explicit-encryption-and-auto-decryption

我能够用自动解密配置mongoShell,这意味着我的初始设置不是错误的。而且,这也让我相信,必须有一种方法来实现.via代码。

我的堆栈:

  • nodeJS:> 14.7
  • mongoDB: 4.4
  • OS: macOS for dev,prod将在AmazonLinux2上
  • 驱动程序:猫鼬,本地-nodejs,mongodb-客户端加密

在文档中没有明确提到这一点。但据我所知,自动解密并不需要企业专用的mongocryptd进程。

正如官方mongoDB-c-驱动器中所提到的

虽然自动加密需要MongoDB 4.2企业或MongoDB 4.2 Atlas集群,但所有用户都支持自动解密。若要配置无需自动加密的自动解密,请在bypass_auto_encryption=True类中设置options::auto_encryption。

我相信bypassAutoEncryption的选择就是为了这个目的。

EN

回答 1

Stack Overflow用户

发布于 2021-09-27 03:38:18

不是一个确切的答案,但这是目前最好的解决方案。我报告这是官方JIRA上的一个bug。

结果,这显然是一个带有节点-mongo-原生库的错误。根据他们的评论,这应该在下一个版本中解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69049603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档