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 版本
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/SSL 与 MongoDB 结合使用,您必须将 TLS/SSL 证书作为 PEM 文件,它们是连接的证书容器。。
MongoDB 可以使用自签名证书或证书颁发机构颁发的任何有效 TLS/SSL 证书。对于生产环境,MongoDB 部署应使用由相同证书颁发机构生成和签名的有效证书。您可以生成并维护一个独立的证书颁发机构,或使用第三方 TLS/SSL 供应商生成的证书。
使用受信任的证书颁发机构签名的证书,将允许 MongoDB 驱动程序验证服务器的身份。
例如,请参阅适用于客户端的 TLS/SSL 配置。
证书过期警告
如果显示的 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。
作为 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 响应。
身份验证
除了加密连接外,TLS/SSL 还允许使用证书进行身份验证,既可用于客户端身份验证,也可用于副本集和分片集群成员的内部身份验证。
有关更多信息,请参阅:
FIPS 模式
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
联邦信息处理标准 (FIPS) 是美国政府的计算机安全标准,用于认证安全加密和解密数据的软件模块和库。您可以配置 MongoDB ,使其使用经 FIPS 140-2 认证的 OpenSSL 库运行。您可以将 FIPS 配置为默认运行或根据需要从命令行运行。
有关示例,请参阅为 FIPS 配置 MongoDB。