3

我一直在关注本指南 -如何使用 MongoDB Client-Side Field Level Encryption (CSFLE) with Node.js/来测试 MongoDB CSFLE。

为此,在本地密钥库存储中创建数据密钥的步骤https://developer.mongodb.com/how-to/client-side-field-level-encryption-csfle-mongodb-node/#create- a-data-key-in-mongodb-for-encrypting-and-decrypting-document-fields数据密钥已成功创建,但 keyAltName 未附加到数据密钥的文档中。

我对此进行了多次测试,我的代码没有任何问题,我正在按照指南进行操作。我不明白是什么导致了这个问题。数据键创建成功,但没有 keyAltNames 字段。非常感谢您的帮助。

与数据密钥文档创建相关的代码

async findOrCreateDataKey(client) {
      const encryption = new ClientEncryption(client, {
      keyVaultNamespace: this.keyVaultNamespace,
      kmsProviders: this.kmsProviders
      })

      await this.ensureUniqueIndexOnKeyVault(client)

      let dataKey = await client
      .db(this.keyDB)
      .collection(this.keyColl)
      .findOne({ keyAltNames: { $in: [this.keyAltNames] } })

      if (dataKey === null) {
        dataKey = await encryption.createDataKey("local", {
           keyAltNames: [this.keyAltNames]
        })
        return dataKey.toString("base64")
      }
      return dataKey["_id"].toString("base64")
   }
}

结果文件

在此处输入图像描述

包 JSON MongoDB 驱动程序/MongoDB 客户端加密 NPM 包版本

"mongodb": "^3.6.0",
"mongodb-client-encryption": "^1.2.1"
4

2 回答 2

0

我设法通过将mongodb-enterprise-cryptdlib 安装到php节点中来解决类似的问题。对于 mongo 容器,我使用的是官方 mongo docker 镜像

    mongodb:
        image: mongo:4.2

ps 我没有使用 mongo 企业版。更多信息在这里 -使用 Mongoose 连接到 docker 环境中的 MongoCryptD 实例

于 2021-09-08T08:25:59.990 回答
0

编辑 - 这个问题现在由 MongoDB 团队修复。请参阅所附问题1

已经准备好一张票来解决这个问题。

请访问以下由我自己在 MongoDB 论坛中打开的线程以获取更多信息。-> https://developer.mongodb.com/community/forums/t/nodejs-the-keyaltnames-field-is-not-created-when-creating-the-data-key-in-mongodb-client-side-字段级加密/15875/3

根据上述线程中的评论,一种解决方案是在创建本地 keyVault 文档后更新它,并添加 keyAltName 字段及其值。这似乎是唯一可行的修复方法,直到 MongoDB 团队在未来的版本中对此进行修复。

于 2021-04-27T11:01:51.747 回答