【问题标题】:MongoDB automatic (implicit) CSFLE broken with Micronaut 3MongoDB 自动(隐式)CSFLE 被 Micronaut 3 破坏
【发布时间】:2022-08-20 05:12:37
【问题描述】:

我最近将我的应用程序从 Micronaut 2 更新到了 Micronaut 3,因此所有 Mongo 自动 CSFLE 加密/解密都停止工作。

如果我创建一个 ClientEncryption 对象并手动解密该字段,则该字段有效,并且日志记录显示它正在获取解密所需的 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 状态,不进行加密/解密。

是否有任何示例显示自动 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 的名为 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\"
                        }
                    }
                }
            }
        }
    }
}
  • 哪个服务器版本?你的 schemaMap(或 encryptedFieldsMap)是什么?什么集合名称?文件示例?

标签: mongodb encryption micronaut mongodb-csfle micronaut-mongodb


【解决方案1】:

写作为答案,因为它很大。

但是对于自动过程,它只打印 READY 状态

AFAIK,这并没有说太多,因为可以从以前的尝试中缓存此信息(如果它不是第一次运行)。 我已经尝试过您的上述文档和 schemaMap,它使用自动加密从您的 4 个案例中加密了 3 个字段,但它不适用于 dog.furtherDetails,因为您有一个错字:furtherDetailsfutherDetails。因此,请确保您的 schemaMap 中没有其他拼写错误。

【讨论】:

  • 感谢您的反馈 - 是的,futherDetails 看起来纯粹是我将其添加到 SO 中的错字,而不是代码本身的问题。您是否有指向您成功加密其他字段的存储库的链接?我一直在尝试通过micronaut.io/launch 重新创建一个精简的 CSFLE 示例项目,但我无法让它运行。
  • 我使用了另一种语言,但鉴于所有加密步骤都是在嵌入式 C 库中完成的(所有语言都相同),这并不重要。您的问题看起来与 schemaMap 中的 fieldName 与数据文档中的字段名称或 schemaMap 中的集合名称与实际集合名称之间的不匹配有关
【解决方案2】:

经过大量调试,结果发现正在使用的 JNA 库没有正确调用加密二进制文件,所以这听起来像是一个错误。将向 Mongo 报告此问题,看看他们是否可以帮助解决此问题....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2017-11-25
    相关资源
    最近更新 更多