TLS/SSL(传输加密)
TLS/SSL
MongoDB 支持使用 TLS/SSL(传输层安全性/安全套接层)加密 MongoDB 的所有网络流量。TLS/SSL 可确保 MongoDB 网络流量只能由目标客户端读取。
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 库)隐式支持临时椭圆曲线 Diffie-Hellman (ECDHE)。 |
macOS | 通过使用本机 macOS TLS/SSL 库安全传输来隐式支持临时椭圆曲线 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
会在连接时记录警告。请参阅 x.509 证书即将过期触发警告,了解更多信息。
OCSP(在线证书状态协议)
为了检查证书吊销,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 相关参数:
参数 | 说明 |
---|---|
启用或禁用 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。