簡體   English   中英

如何設置 mongoDB 的新 CSFLE 功能,使用 nodejs 進行顯式加密隱式解密?

[英]How do I set up mongoDB's new CSFLE feature, with explicit encryption implicit decryption using nodejs?

我正在嘗試將 MongoDB 的客戶端文件級加密功能與社區版一起使用。 我對自動加密功能不感興趣。 但是,我們需要自動解密功能,根據文檔,社區版也可以使用該功能。

我們通常在我們的應用程序中使用 mongoose,但我也嘗試使用本機 nodejs 驅動程序。 這是我用來創建連接的代碼。 如果我注釋掉autoEncryption object,這很好用。這樣做允許我手動加密,但這樣我們也必須手動解密,這就達到了目的。

一些文檔建議將bypassAutoEncryption: true with extraOptions object 添加到autoEncryption object 中。我已經嘗試過了,如下所示。

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選項配置客戶端,必須在選項中傳遞自動加密。 但是每當我通過這個選項時,我都會得到以下異常

(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,這意味着我的初始設置沒有錯誤。 此外,它讓我相信必須有一種方法來做到這一點。也可以通過代碼。

我的堆棧:

  • 節點JS:> 14.7
  • mongoDB:4.4
  • 操作系統:macOS for dev,prod 將在 AmazonLinux2 上
  • 驅動程序:mongoose、native-nodejs、 mongodb-client-encryption

文檔中沒有明確提及。 但據我所知,自動解密不需要企業專用的 mongocryptd 進程。

如官方mongoDB-c-driver中所述

雖然自動加密需要MongoDB 4.2企業版或MongoDB 4.2 Atlas集群,但所有用戶都支持自動解密。 要配置自動解密而不自動加密,請在 options::auto_encryption class 中設置 bypass_auto_encryption=True。

我相信bypassAutoEncryption選項就是為此目的而設計的。

不完全是答案,但這是目前最好的解決方案。 我將此報告為官方 JIRA 上的錯誤。

事實證明,這顯然是 node-mongo-native 庫的一個錯誤 根據他們的評論,這應該在下一個版本中修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM