TLS/SSL
MongoDB 支持使用 TLS/SSL(传输层安全性/安全套接层)加密 MongoDB 的所有网络流量。TLS/SSL 可确保 MongoDB 网络流量只能由目标客户端读取。
从 MongoDB 7.0 和 6.0.7 开始,MongoDB 支持在以下操作系统上使用 OpenSSL 3.0 和 OpenSSL FIPS 提供程序:
Red Hat Enterprise Linux 9
Amazon Linux 2023
Ubuntu Linux 22.04
从 MongoDB 8.0 开始,MongoDB 支持 OpenSSL 3.0 和适用于 Amazon Linux 2023.3 的 OpenSSL FIPS 提供程序。
要配置部署以使用 TLS,请遵循 快速入门。
TLS 版本
MongoDB 在支持 TLS 1.1+ 的系统上禁用对 TLS 1.0 加密的支持。
TLS 库
MongoDB 使用原生 TLS / SSL OS 库:
平台 | TLS/SSL 库 |
|---|---|
Windows | 安全通道 (Schannel) |
Linux/BSD | OpenSSL |
macOS | 安全传输 |
TLS/SSL 密码
对于所有连接, MongoDB 的 TLS/SSL 加密仅允许使用强 TLS/SSL 密码,且密钥长度至少为 128 位。
前向保密
前向安全密码套件将创建一个临时会话密钥,该密钥受服务器的私钥保护,但永远不会被传输。使用临时密钥可确保即使服务器的私钥已遭泄露,您仍然无法使用泄露的密钥解密过去的会话。
MongoDB 支持使用 Ephemeral Diffie-Hellman (DHE) 和 Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) 算法的前向安全密码套件。
临时椭圆曲线 Diffie-Hellman (ECDHE)
平台 | 支持级别 |
|---|---|
Linux | 如果 Linux 平台的 OpenSSL 支持自动曲线选择,则 MongoDB 可以提供对 Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) 的支持。 否则,如果 Linux 平台的 OpenSSL 不支持自动曲线选择,MongoDB 会尝试使用 |
Windows | 通过使用安全通道 (Schannel)(即原生 Windows TLS/SSL 库)隐式支持 Ephemeral Elliptic Curve Diffie-Hellman (ECDHE)。 |
macOS | 通过使用安全传输(即原生 macOS TLS/SSL 库)隐式支持 Ephemeral Elliptic Curve Diffie-Hellman (ECDHE)。 |
ECDHE 密码套件比静态 RSA 密码套件慢。为了提高 ECDHE 的性能,您可以使用采用椭圆曲线数字签名算法ECDSA () 的证书。另请参阅 前向安全性能以了解更多信息。
Ephemeral Diffie-Hellman (DHE)
平台 | 支持级别 |
|---|---|
Linux | MongoDB 提供对 Ephemeral Diffie-Hellman (DHE) 的支持:
|
Windows | 通过使用安全通道 (Schannel)(即原生 Windows TLS/SSL 库)隐式支持 Ephemeral Diffie-Hellman (DHE)。 |
macOS | 通过使用安全传输(即原生 macOS TLS/SSL 库)隐式支持Ephemeral Diffie-Hellman (DHE)。 |
注意
如果客户端协商使用带有 DHE 的密码套件,却不能接受服务器选择的参数,那么 TLS 连接将失败。
除非从 Oracle 购买了扩展支持,否则 Java 6 和 7 不支持强参数(即参数位数大于 1024)。但是,Java 7 支持并优先选择使用 ECDHE,因此如果 ECDHE 可用,将协商使用 ECDHE。
DHE(和 ECDHE)密码套件的性能优于静态 RSA 密码套件,其中 DHE 明显优于 ECDHE。有关更多信息,请参阅前向保密性能。
前向安全性能
DHE(和 ECDHE)密码套件的加解密速度比静态 RSA 密码套件慢,其中 DHE 的速度明显慢于 ECDHE。
为了提高 ECDHE 的性能,您可以使用采用椭圆曲线数字签名算法 ()ECDSA 的证书。或者,您可以使用opensslCipherConfig 参数禁用 ECDHE 密码套件,如以下示例所示(这也会禁用 DHE):
mongod --setParameter opensslCipherConfig='HIGH:!EXPORT:!aNULL:!kECDHE:!ECDHE:!DHE:!kDHE@STRENGTH'
如果由于性能原因需要禁用对 DHE 密码套件的支持,可以使用 opensslCipherConfig 参数,如以下示例所示:
mongod --setParameter opensslCipherConfig='HIGH:!EXPORT:!aNULL:!DHE:!kDHE@STRENGTH'
证书
要将 TLS 与MongoDB结合使用,您必须拥有 TLS 证书。请参阅获取 TLS 服务器证书。
证书过期警告
如果显示的 x.509 证书在 mongod/mongos 主机系统时间后的 30 天内过期,则 mongod / mongos 会在连接时记录警告。
OCSP(在线证书状态协议)
从 MongoDB 6.0 开始,如果在初始同步期间将 ocspEnabled 设置为 true,则所有节点必须都能够到达 OCSP 响应器。
如果成员在 STARTUP2 状态下发生故障,则将 tlsOCSPVerifyTimeoutSecs 设置为小于 5 的值。
为了检查证书吊销,MongoDB enables 默认使用 OCSP(在线证书状态协议)。使用 OCSP 后,无需定期下载 Certificate Revocation List (CRL) 并使用已更新 CRL 重新启动 mongod / mongos。
注意
Let's Encrypt OCSP 弃用
Let's Encrypt 已终止对较新证书的 OCSP支持。 Let's Encrypt 颁发的新证书可能不包含 OCSP 响应程序URL。仅当证书包含 OCSP URI 时,才会进行 OCSP 吊销检查,因此缺少 OCSP URL是正常情况,并不一定表示MongoDB 部署有问题。
作为 OSCP 支持的一部分,MongoDB 在 Linux 上支持以下功能:
OCSP 装订。通过 OCSP 装订,
mongod和mongos实例可在 TLS/SSL 握手期间向客户端提供这些证书时,将 OCSP 状态响应附加或“装订”到其证书中。OCSP 装订使客户端无需单独请求来检索所提供证书的 OCSP 状态。OCSP 状态响应包含在证书中。OCSP 必备装订扩展。OCSP 必备装订是一个可以添加到服务器证书的扩展,用于指示客户端在 TLS/SSL 握手期间接收证书时需要 OCSP 装订。
MongoDB 还提供以下 OCSP 相关参数:
Parameter | 说明 |
|---|---|
启用或禁用 OCSP 支持。 | |
指定在刷新装订的 OCSP 状态响应之前等待的秒数。 | |
您可以使用 setParameter 配置文件设置或 --setParameter 命令行选项在启动时设置这些参数。
注意
从 MongoDB 5.0 开始,rotateCertificates 命令和 db.rotateCertificates() 方法也会刷新任何已装订 OCSP 响应。
FIPS 模式
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
联邦信息处理标准 (FIPS) 是美国政府的计算机安全标准,用于认证安全加密和解密数据的软件模块和库。您可以配置 MongoDB ,使其使用经 FIPS 140-2 认证的 OpenSSL 库运行。您可以将 FIPS 配置为默认运行或根据需要从命令行运行。
有关示例,请参阅为 FIPS 配置 MongoDB。