Docs 菜单
Docs 主页
/ / /
Rust 驱动程序
/ /

启用和配置 TLS

在此页面上

  • Overview
  • 启用 TLS
  • 配置证书
  • 客户端中的参考证书
  • 例子
  • 更多信息
  • API 文档

在本指南中,您可以了解如何使用TLS 协议保护与 MongoDB 部署的连接。 TLS 是一种加密协议,可保护应用程序与 MongoDB 之间的通信。 要将连接配置为使用 TLS,请启用 TLS 选项并在创建客户端时提供证书以进行验证。

本指南包括以下部分:

  • 启用 TLS描述了在连接上启用TLS 的方法

  • 配置证书描述配置 TLS 所需的证书

  • 客户端中的参考证书提供了一个示例,说明如何创建 TlsOptions结构来配置 TLS 选项

  • 附加信息提供了本指南中提到的类型和方法的资源和 API 文档链接

提示

您可以通过以下方式之一在与 MongoDB 实例的连接上启用 TLS:

  • 在连接字符串中将 tls 选项设置为 true

  • ClientOptions实例的tls字段设置为具有空TlsOptions结构的Tls::Enabled变体,并使用这些选项实例化Client

从以下 Connection StringClientOptions标签页中选择,查看相应的代码示例:

let uri = "mongodb://<hostname>:<port>?tls=true"
let client = Client::with_uri_str(uri).await?;
let uri = "<connection string>"
let mut client_options = ClientOptions::parse(uri).await?;
let tls_opts = TlsOptions::builder().build();
client_options.tls = Some(Tls::Enabled(tls_opts));
let client = Client::with_options(client_options)?;

注意

如果您的连接字符串通过包含mongodb+srv前缀来使用 DNS SRV 记录,则默认情况下会对您的连接启用 TLS。

有关客户端选项的完整列表,请参阅连接选项指南。

要成功发起 TLS 请求,您的应用程序必须提供加密证书来证明其身份。 应用程序的证书必须存储为隐私增强邮件 (PEM) 文件,以便在连接到 MongoDB 部署时启用 TLS。 PEM 文件格式是加密证书的container格式。

重要

对于生产使用,我们建议您的 MongoDB 部署使用由同一证书颁发机构生成和签名的有效证书。 对于测试,您的部署可以使用自签名证书。

以下列表描述了客户端为建立启用 TLS 的连接而必须提供的组件:

TLS 组件
说明
证书颁发机构 (CA)
建立 TLS 连接时要信任的一个或多个证书颁发机构
客户端证书
数字证书,允许服务器验证应用程序的身份,以建立加密的网络连接
证书密钥
客户端证书私钥文件,通常包含在证书文件本身中
密码
用于解密客户端私钥(如果已加密)的密码

您必须在TlsOptions结构中引用证书,以便服务器可以在客户端连接之前验证证书。

必须首先将证书文件路径转换为 PathBuf 类型,因此您必须从 std::path 模块导入此类型。然后,调用 TlsOptions 结构体的构建器函数,将 ca_file_pathcert_key_file_path 字段设置为证书文件路径。

TlsOptions实例中,您可以设置可选字段来配置连接上的 TLS。 出于测试目的,您可以设置allow_invalid_certificatesallow_invalid_hostnames字段。

allow_invalid_certificates 选项设置为 true 会禁用主机名验证,而将 allow_invalid_hostnames 设置为 true 会禁用证书验证。

警告

在生产环境中指定这两个选项都会导致应用程序不安全,并且可能容易受到过期证书和冒充有效客户端实例的外部进程的攻击。

此示例执行以下操作来创建一个为 TLS 配置的TlsOptions实例和Client实例:

  1. 创建变量以引用PathBuf实例中的证书文件路径。

  2. 实例化TlsOptions结构并将ca_file_pathcert_key_file_path字段设置为相关文件路径。

  3. TlsOptions实例传递给Tls枚举的Enabled变体。

  4. ClientOptions结构的tls字段设置为包含TlsOptions实例的Tls::Enabled变体。

  5. 使用这些选项创建一个Client实例。

use std::path::PathBuf;
use mongodb::{ options::{ ClientOptions, TlsOptions, Tls }, Client };
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let mut client_options = ClientOptions::parse(uri).await?;
let ca_file = PathBuf::from(r"<path to CA certificate>");
let key_file = PathBuf::from(r"<path to client certificate>");
let tls_opts = TlsOptions::builder().ca_file_path(ca_file).cert_key_file_path(key_file).build();
client_options.tls = Some(Tls::Enabled(tls_opts));
let _client = Client::with_options(client_options)?;
Ok(())
}

要了解有关在连接上启用 TLS 的更多信息,请参阅以下服务器手册文档:

要进一步了解本指南所提及的任何方法或类型,请参阅以下 API 文档:

后退

网络压缩