[英]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 對此類選項的引用
我能夠使用自動解密配置 mongoShell,這意味着我的初始設置沒有錯誤。 此外,它讓我相信必須有一種方法來做到這一點。也可以通過代碼。
我的堆棧:
文檔中沒有明確提及。 但據我所知,自動解密不需要企業專用的 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.