Docs 菜单

Docs 主页开发应用程序MongoDB Manual

静态加密

在此页面上

  • 加密存储引擎
  • 应用程序级加密

与传输加密和保护相关帐户、密码和加密密钥的良好安全策略结合使用时,静态加密可以帮助确保符合安全和隐私标准,包括 HIPAA、PCI-DSS 和 FERPA。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

重要

仅适用于 WiredTiger 存储引擎。

MongoDB Enterprise 3.2 为 WiredTiger 存储引擎引入了一个原生加密选项。此功能允许 MongoDB 加密数据文件,仅限持有解密密钥的各方可以解码和读取数据。

注意

在 4.0 版中进行了更改

Windows 上的 MongoDB Enterprise 不再支持将 AES256-GCM 作为静态加密的块密码。仅 Linux 支持此用法。

如果启用加密,MongoDB Enterprise 使用的默认加密模式则是通过 OpenSSL 实现的 AES256-CBC(或是采用密码分组链接模式的 256 位高级加密标准)。AES-256 使用对称密钥;即,使用同一密钥来加密和解密文本。MongoDB Enterprise for Linux 还支持经过身份验证的加密 AES256-GCM(或是采用 Galois/Counter 模式的 256 位高级加密标准)。

加密存储引擎使用认证的底层操作系统加密提供程序来执行加密操作。例如,在 Linux 操作系统上安装的 MongoDB 使用 OpenSSL libcrypto FIPS-140 模块。

要在符合 FIPS 标准的模式下运行 MongoDB:

  1. 将操作系统配置为在 FIPS 强制模式下运行。

  2. 配置 MongoDB 以启用 net.tls.FIPSMode 设置。

  3. 重新启动 mongodmongos

  4. 检查服务器日志文件以确认 FIPS 模式已启用。如果 FIPS 模式已启用,日志文件中则会显示消息 FIPS 140-2 mode activated

更多信息,请参阅为 FIPS 配置 MongoDB

注意

AES256-GCM 和文件系统备份

对于使用AES256-GCM加密模式的加密存储引擎AES256-GCM要求每个进程使用带有密钥的唯一计数器区块值。

对于使用AES256-GCM密码配置的加密存储引擎

  • 从热备份恢复
    从 4.2 开始,如果从通过“热”备份(即 mongod 正在运行)获取的文件进行恢复,MongoDB 可以在启动时检测到“脏”密钥,并自动滚动更新数据库密钥以避免重用 IV(初始化向量)。
  • 从冷备份恢复

    不过,如果从通过“冷”备份(即 mongod 未运行)获取的文件进行恢复,MongoDB 无法在启动时检测到“脏”密钥,重用 IV 将导致机密性和完整性保证失效。

    从 4.2 版开始,为了避免从冷文件系统快照恢复后重用密钥,MongoDB 添加了一个新的命令行选项 --eseDatabaseKeyRollover。使用 --eseDatabaseKeyRollover 选项启动时,mongod 实例会滚动使用 AES256-GCM 密码配置的数据库密钥并退出。

提示

  • 一般来说,如果对 MongoDB Enterprise 4.2+ 使用基于文件系统的备份,请尽可能使用“热”备份功能。

  • 对于 MongoDB Enterprise 版本 4.0 及更早版本,如果您使用 AES256-GCM 加密模式,请复制数据文件或从文件系统快照(“热”快照或“冷”快照)进行恢复。

数据加密流程包括:

  • 生成主密钥。

  • 为每个数据库生成密钥。

  • 用数据库密钥加密数据。

  • 使用主密钥来加密数据库密钥。

此加密在存储层以透明方式进行;即,从文件系统的角度来看,所有数据文件都是完全加密的,而数据仅以未加密状态存在于内存和传输过程中。

要加密 MongoDB 的所有网络流量,可以使用 TLS/SSL(传输层安全性/安全套接字层)。请参阅为 TLS/SSL 配置 mongodmongos以及客户端的 TLS /SSL 配置。

重要

加密密钥的安全管理至关重要。

数据库密钥属于服务器内部,并且仅以加密格式分页到磁盘。MongoDB 在任何情况下都不会将主密钥分页到磁盘。

仅主密钥属于服务器外部(即,它会与数据以及数据库密钥分开保存),且需进行外部管理。为了管理主密钥,MongoDB 的加密存储引擎支持两种密钥管理选项:

  • 通过 Key Management Interoperability Protocol (KMIP) 与第三方密钥管理设备集成。推荐

    注意

    对于使用 KMIP 与第三方密钥管理设备进行的集成,您应允许以下 KMIP 操作:

    • 创建 (operation_create)

    • 获取 (operation_get)

    • 激活 (operation_activate)

  • 通过密钥文件进行本地密钥管理。

要配置 MongoDB 进行加密并使用两个密钥管理选项,请参阅配置加密

加密不是复制的一部分:

  • 主密钥和数据库密钥不会被复制,且

  • 数据不是通过网络进行本地加密的。

虽然您可以为节点重复使用同一密钥,但 MongoDB 建议为每个节点使用单独的密钥并进行传输加密。

详情请参阅轮换加密密钥

仅在 MongoDB Enterprise 中可用。

从 MongoDB 6.0 Enterprise 开始,您可以使用外部密钥管理互操作性协议 (KMIP) 服务器安全地管理用于加密 MongoDB 审核日志的密钥。

KMIP 可以简化加密密钥的管理,使您无需使用不标准的密钥管理流程。

默认 KMIP 协议版本是 1.2。您可以在 MongoDB 服务器的配置文件中将 MongoDB 配置为使用 KMIP 1.0 或 1.1 版本。

要使用带有审核日志加密功能的 KMIP 服务器,请配置以下这些设置和参数:

在测试审核日志加密时,您也可以使用 auditLog.localAuditKeyFile 设置。

从 MongoDB 6.0 开始,如果需要降级到较早的 MongoDB 版本,必须先移除 auditLog.auditEncryptionKeyIdentifierauditLog.localAuditKeyFile 以禁用审核日志加密。现有的加密审核日志保持加密状态,可以保留为存储和处理加密日志而开发的任何过程。

注意

对于审核日志加密,审核日志目标必须是文件。syslog 不能用作目标。

如果您未使用外部密钥管理互操作性协议 (KMIP) 服务器来管理用于加密审核日志的密钥(如上一部分所示),则本节内容将适用于您。

审核日志文件并未作为 MongoDB 加密存储引擎的一部分进行加密。作为正常操作的一部分,使用日志记录运行的 mongod 可能会将潜在的敏感信息输出到日志文件,具体取决于配置的日志详细程度

使用 security.redactClientLogData 设置可防止潜在敏感信息进入 mongod 进程日志。设置 redactClientLogData 可减少日志中的详细信息,并可能使日志诊断复杂化。

有关详情,请参阅日志校订手册条目。

应用程序级加密在应用程序层提供对每个字段或每个文档的加密。

4.2 版本中的新增功能:MongoDB 4.2 系列驱动程序提供客户端字段级加密框架。更多信息,请参阅客户端字段级加密

要加密完整文档,请编写自定义加密和解密例程,或使用商业解决方案。

有关 MongoDB 的认证合作伙伴列表,请参阅合作伙伴列表

← 安装 libmongocrypt