Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

TLS/SSL(传输加密)

在此页面上

  • TLS/SSL
  • TLS/SSL 密码
  • 证书
  • 身份验证
  • FIPS 模式

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 提供程序。

MongoDB 在支持 TLS 1.1+ 的系统上禁用对 TLS 1.0 加密的支持。

MongoDB 使用原生 TLS / SSL OS 库:

平台
TLS/SSL 库
Windows
安全通道 (Schannel)
Linux/BSD
OpenSSL
macOS
安全传输

对于所有连接, MongoDB 的 TLS/SSL 加密仅允许使用强 TLS/SSL 密码,且密钥长度至少为 128 位。

前向安全密码套件将创建一个临时会话密钥,该密钥受服务器的私钥保护,但永远不会被传输。使用临时密钥可确保即使服务器的私钥已遭泄露,您仍然无法使用泄露的密钥解密过去的会话。

MongoDB 支持使用 Ephemeral Diffie-Hellman (DHE) 和 Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) 算法的前向安全密码套件。

平台
支持级别
Linux

如果 Linux 平台的 OpenSSL 支持自动曲线选择,则 MongoDB 可以提供对 Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) 的支持。

否则,如果 Linux 平台的 OpenSSL 不支持自动曲线选择,MongoDB 会尝试使用 prime256v1 作为命名的曲线来启用 ECDHE 支持。

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) 的证书。另请参阅 正向加密性能以了解更多信息

平台
支持级别
Linux

MongoDB 提供对 Ephemeral Diffie-Hellman (DHE) 的支持:

  • 如果在启动时设置了 opensslDiffieHellmanParameters(无论 ECDHE 是启用还是禁用)。

  • 否则,如果未设置opensslDiffieHellmanParameters 参数,但已启用 ECDHE ,则 MongoDB 使用ffdhe3072 参数启用 DHE,如 RFC- 7919#appendix-A2 中所定义。 。

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 会在连接时记录警告。

从 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 装订,mongodmongos 实例可以在 TLS/SSL 握手期间向客户端提供其证书时,将 OCSP 状态响应附加或“装订”到这些证书中。通过将 OCSP 状态响应包含在证书中,OCSP 装订可以让客户端无需发出单独请求来检索所提供证书的 OCSP 状态。

  • OCSP 必备装订扩展。OCSP 必备装订是一个可以添加到服务器证书的扩展,用于指示客户端在 TLS/SSL 握手期间接收证书时需要 OCSP 装订。

MongoDB 还提供以下 OCSP 相关参数:

Parameter
说明
启用或禁用 OCSP 支持。
指定在刷新装订的 OCSP 状态响应之前等待的秒数。
指定 mongod / mongos 实例在接收其证书的 OCSP 状态响应时应等待的最大秒数。
指定 mongod / mongos 在客户端证书验证时应等待 OCSP 响应的最大秒数。

您可以使用 setParameter 配置文件设置或 --setParameter 命令行选项在启动时设置这些参数。

注意

从 MongoDB 5.0 开始,rotateCertificates 命令和 db.rotateCertificates() 方法也会刷新任何已装订 OCSP 响应。

除了加密连接外,TLS/SSL 还允许使用证书进行身份验证,既可用于客户端身份验证,也可用于副本集和分片集群成员的内部身份验证

有关更多信息,请参阅:

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

联邦信息处理标准 (FIPS) 是美国政府的计算机安全标准,用于认证安全加密和解密数据的软件模块和库。您可以配置 MongoDB ,使其使用经 FIPS 140-2 认证的 OpenSSL 库运行。您可以将 FIPS 配置为默认运行或根据需要从命令行运行。

有关示例,请参阅为 FIPS 配置 MongoDB。

后退

轮换密钥