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 cipher suites are slower than static RSA cipher suites. For better performance with ECDHE, you can use certificates that use Elliptic Curve Digital Signature Algorithm (ECDSA). See also Forward Secrecy Performance for more information.
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 has ended OCSP support for newer certificates. New certificates issued by Let's Encrypt might not include an OCSP responder URL. OCSP revocation checking occurs only when a certificate contains an OCSP URI, so a missing OCSP URL is expected and doesn't necessarily indicate a problem with your MongoDB deployment.
作为 OSCP 支持的一部分,MongoDB 在 Linux 上支持以下功能:
OCSP stapling. With OCSP stapling,
mongodandmongosinstances attach or "staple" the OCSP status response to their certificates when providing these certificates to clients during the TLS/SSL handshake. OCSP stapling removes the need for clients to make a separate request to retrieve the OCSP status of the provided certificate. The OCSP status response is included with the certificates.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。