簡體   English   中英

MongoDB 自動(隱式)CSFLE 被 Micronaut 3 破壞

[英]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額外選項屬性指向安裝位置。


  • 服務器版本:企業版 4.2.21

我無法給出確切的 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,因為您有一個錯字: furtherDetailsfutherDetails 因此,請確保您的 schemaMap 中沒有其他拼寫錯誤。

經過大量調試,結果發現正在使用的 JNA 庫沒有正確調用加密二進制文件,所以這聽起來像是一個錯誤。 將向 Mongo 報告此問題,看看他們是否可以幫助解決此問題....

暫無
暫無

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

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