代码之家  ›  专栏  ›  技术社区  ›  Ravindu Nirmal Fernando

MongoDB客户端字段级加密-NodeJS驱动程序-keyAltNames字段不是在本地密钥库的数据密钥文档中创建的

  •  0
  • Ravindu Nirmal Fernando  · 技术社区  · 3 年前

    我一直在遵循这个指南- How to use 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")
       }
    }
    

    结果文件

    enter image description here

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

    "mongodb": "^3.6.0",
    "mongodb-client-encryption": "^1.2.1"
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Ravindu Nirmal Fernando    3 年前

    编辑-这个问题现在由MongoDB团队解决。请参阅附件 1 .

    一切都准备好了 ticket in place to fix this 问题

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

    基于上述线程中的注释,一种解决方案是在创建本地keyVault文档后更新该文档,并使用其值添加keyAltName字段。这似乎是唯一可行的修复方法,直到MongoDB团队在未来的版本中发布一个修复方法。

        2
  •  0
  •   Lukas Zmoginas    3 年前

    我通过安装 mongodb-enterprise-cryptd 解放成 php 节点。对于mongo容器,我使用的是官方的mongo docker图像

        mongodb:
            image: mongo:4.2
    

    p、 我没有使用mongo enterprise版本。这里有更多信息- Connecting to a MongoCryptD instance in docker environment with Mongoose