TLS/SSL (传输加密)
TLS/SSL
MongoDB 支持使用 TLS/SSL(传输层安全/安全套接字层)加密 MongoDB 的所有网络流量。TLS/SSL 确保 MongoDB 的网络流量只能被预期的客户端读取。
从 MongoDB 7.0 和 6.0.7 开始,MongoDB 支持以下操作系统上的 OpenSSL 3.0 和 OpenSSL FIPS 提供商:
红帽企业 Linux 9
亚马逊 Linux 2023
Ubuntu Linux 22.04
从 MongoDB 8.0 开始,MongoDB 支持 Amazon Linux 2023.3 上的 OpenSSL 3.0 和 OpenSSL FIPS 提供商。
TLS 版本
MongoDB在 TLS 1.1+ 可用的系统上禁用了 TLS 1.0 加密的支持。
TLS 库
MongoDB 使用本机 TLS/SSL 操作系统库
平台 | TLS/SSL 库 |
---|---|
Windows | 安全通道 (Schannel) |
Linux/BSD | OpenSSL |
macOS | 安全传输 |
TLS/SSL 加密算法
MongoDB 的 TLS/SSL 加密仅允许使用强 TLS/SSL 加密算法,所有连接的最小密钥长度为 128 位。
前向安全
前向安全密钥套件创建一个临时会话密钥,该密钥由服务器的私钥保护,但永远不会被传输。使用临时密钥可以确保即使服务器的私钥被泄露,也无法使用泄露的密钥解密过去会话。
MongoDB支持使用临时Diffie-Hellman(DHE)和临时椭圆曲线Diffie-Hellman(ECDHE)算法的前向安全密钥套件。
临时椭圆曲线Diffie-Hellman(ECDHE)
平台 | 支持级别 |
---|---|
Linux | 如果Linux平台的OpenSSL支持自动曲线选择,MongoDB将启用对临时椭圆曲线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
)的证书。有关更多信息,请参阅前向安全性能
临时Diffie-Hellman(DHE)
平台 | 支持级别 |
---|---|
Linux | MongoDB启用对临时Diffie-Hellman(DHE)的支持
|
Windows | 通过使用安全通道(Schannel),Windows的本地TLS/SSL库隐式支持临时Diffie-Hellman(DHE)。 |
macOS | 通过使用安全传输,macOS的本地TLS/SSL库隐式支持临时Diffie-Hellman(DHE)。 |
注意
如果客户端与DHE协商了加密套件,但不能接受服务器选择的参数,则TLS连接失败。
Java 6和7不支持强参数(即大小大于1024),除非从Oracle购买了扩展支持。但是,Java 7支持并优先使用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配置。
证书过期警告
OCSP(在线证书状态协议)
从 MongoDB 6.0 开始,如果在初始同步期间将 ocspEnabled
设置为 true
,则所有节点必须能够访问 OCSP 响应者。
如果成员处于 STARTUP2
状态失败,请将 tlsOCSPVerifyTimeoutSecs
设置为一个小于 5
的值。
为了检查证书吊销,MongoDB 默认启用 OCSP(在线证书状态协议)的使用。使用 OCSP 消除了定期下载 证书吊销列表(CRL)
并重新启动 mongod
/ mongos
以更新 CRL 的需要。
作为其 OCSP 支持的一部分,MongoDB 在 Linux 上支持以下功能
OCSP stapling。通过 OCSP stapling,
mongod
和mongos
实例在提供这些证书进行 TLS/SSL 握手时,将 OCSP 状态响应附加到它们的证书中或“粘贴”到它们的证书中。通过在证书中包含 OCSP 状态响应,OCSP stapling 消除了客户端需要单独请求以检索提供证书的 OCSP 状态的需要。OCSP必须粘贴扩展. OCSP必须粘贴扩展是一种可以添加到服务器证书的扩展,告诉客户端在TLS/SSL握手期间接收到证书时预期OCSP粘贴。
MongoDB还提供了以下与OCSP相关的参数
参数 | 描述 |
---|---|
启用或禁用OCSP支持。 | |
指定在刷新粘贴的OCSP状态响应之前等待的秒数。 | |
指定mongod / mongos实例等待接收其证书的OCSP状态响应的最大秒数。 | |
指定mongod / mongos在验证客户端证书时等待OCSP响应的最大秒数。 |
您可以使用setParameter配置文件设置或--setParameter命令行选项在启动时设置这些参数。
注意
从MongoDB 5.0开始,rotateCertificates命令和db.rotateCertificates()方法也将刷新任何粘贴的OCSP响应。
身份验证
除了加密连接外,TLS/SSL 还允许使用证书进行身份验证,包括客户端身份验证以及副本集和分片集群成员的内部身份验证。
更多信息,请参阅
FIPS 模式
注意
企业功能
仅在 MongoDB 企业版中可用。
联邦信息处理标准(FIPS)是美国政府计算机安全标准,用于认证加密和解密数据的软件模块和库。您可以配置 MongoDB 使用 FIPS 140-2 认证的 OpenSSL 库运行。可以通过命令行默认配置或按需配置 FIPS 运行。
例如,请参阅为 FIPS 配置 MongoDB。