![](/img/trans.png)
[英]How do I set up mongoDB's new CSFLE feature, with explicit encryption implicit decryption using nodejs?
[英]MongoDB automatic (implicit) CSFLE broken with Micronaut 3
我最近將我的應用程序從 Micronaut 2 更新到了 Micronaut 3,因此所有 Mongo 自動 CSFLE 加密/解密都停止工作。
如果我創建一個 ClientEncryption object 並手動解密該字段,則該字段有效,並且日志記錄顯示它正在獲取解密所需的 KMS 和密鑰信息:
INFO org.mongodb.driver.client - executeStateMachine: READY
INFO org.mongodb.driver.client - executeStateMachine: NEED_MONGO_KEYS
INFO org.mongodb.driver.client - executeStateMachine: NEED_KMS
// manual decryption result here
但對於自動過程,它只打印 READY state,不進行加密/解密。
是否有任何示例顯示自動 CSFLE 與 Micronaut 3 一起使用,或者有人遇到過這個問題嗎? 這可能是 Micronaut 3 的錯誤嗎?
Micronaut 3 升級中的兩個相關依賴項是:
implementation "io.micronaut.mongodb:micronaut-mongo-reactive:4.2.0" // driver
implementation "org.mongodb:mongodb-crypt:1.5.2" // uses libmongocrypt
mongodb-enterprise-cryptd v5.0.6 二進制文件安裝在我們運行應用程序的 ubuntu:20.04 操作系統上。 Mongo 連接中的mongocryptdSpawnPath
額外選項屬性指向安裝位置。
我無法給出確切的 schemaMap 和 DB 詳細信息,但這里有一個由相同代碼生成的類似數據,用於一個名為 zoo 的 DB 和兩個使用 CSFLE 的 collections,稱為 dogAnimals 和 catAnimals。
樣本 dogAnimals 文件:
{
"basicDetails": {
"dogName":"Barney", // should be encrypted
"age":5,
},
"furtherDetails": {
"dogBreedInfo": { // should be encrypted
"breedName": "Golden Retriever",
"averageLifeSpanInYears": 20
}
}
}
樣本 catAnimals 文檔:
{
"catName":"Mrs Miggins", // should be encrypted
"age":2,
"catFacts": {
"favouriteHuman": "Robert Bingley", // should be encrypted
"mood": "snob"
}
}
匹配 schemaMap:
{
"zoo.dogAnimals": {
"bsonType": "object",
"encryptMetadata": {
"keyId": [
{
"$binary": {
"base64": "12345678",
"subType": "04"
}
}
]
},
"properties": {
"basicDetails": {
"bsonType": "object",
"properties": {
"dogName": {
"encrypt": {
"bsonType": "string",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
}
}
},
"futherDetails": {
"bsonType": "object",
"properties": {
"dogBreedInfo": {
"encrypt": {
"bsonType": "object",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
}
}
}
}
}
},
"zoo.catAnimals": {
"bsonType": "object",
"encryptMetadata": {
"keyId": [
{
"$binary": {
"base64": "12345678",
"subType": "04"
}
}
]
},
"properties": {
"catName": {
"encrypt": {
"bsonType": "string",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
}
},
"catFacts": {
"bsonType": "object",
"properties": {
"favouriteHuman": {
"encrypt": {
"bsonType": "string",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
}
}
}
}
}
}
}
寫作為答案,因為它很大。
但是對於自動過程,它只打印 READY state
AFAIK,這並沒有說太多,因為可以從以前的嘗試中緩存此信息(如果它不是第一次運行)。 我已經嘗試過您的上述文檔和 schemaMap,它使用自動加密從您的 4 個案例中加密了 3 個字段,但它不適用於 dog.furtherDetails,因為您有一個錯字: furtherDetails
與futherDetails
。 因此,請確保您的 schemaMap 中沒有其他拼寫錯誤。
經過大量調試,結果發現正在使用的 JNA 庫沒有正確調用加密二進制文件,所以這聽起來像是一個錯誤。 將向 Mongo 報告此問題,看看他們是否可以幫助解決此問題....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.