Overview
在本指南中,您可以了解如何使用 TLS 协议保护与 MongoDB 部署的连接。 要将连接配置为使用 TLS,请启用 TLS 选项并在创建客户端时提供证书以进行验证。
本指南包括以下部分:
启用 TLS描述了在连接上启用TLS 的方法
配置证书描述配置 TLS 所需的证书
客户端中的参考证书提供了一个示例,说明如何创建
tls.Config
结构来配置 TLS 选项附加信息提供了本指南中提到的类型和方法的资源和 API 文档链接
提示
要了解有关 TLS 的更多信息,请参阅维基百科中有关传输层安全的条目。
启用 TLS
您可以通过以下方式之一在与 MongoDB 实例的连接上启用 TLS:
在连接字符串中将
tls
选项设置为true
创建
ClientOptions
实例时将空tls.Config
结构传递给SetTLSConfig()
方法
从以下 Connection String和ClientOptions标签页中选择,查看相应的代码示例:
注意
如果您在连接到 MongoDB 时通过在连接字符串中指定 +srv
修改来使用 DNS SRV 记录,则默认情况下会在连接上启用 TLS。要禁用 TLS/SSL,请在连接字符串或 ClientOptions
对象中将 tls
或 ssl
参数值设为 false
。
要学习;了解有关使用 DNS 种子列表时的连接行为的更多信息,请参阅MongoDB Server中的 SRV 连接格式 部分。
要查看客户端选项的完整列表,请参阅 指定连接选项 指南。
配置证书
要成功发起 TLS 请求,您的应用程序必须提供加密证书来证明其身份。 应用程序的证书必须存储为 PEM 文件,才能在连接时启用 TLS。
重要
在生产中使用有效证书
对于生产使用,我们建议您的 MongoDB 部署使用由同一证书颁发机构生成和签名的有效证书。 对于测试,您的部署可以使用自签名证书。
以下列表描述了客户端为建立启用 TLS 的连接而必须提供的组件:
TLS 组件 | 说明 |
---|---|
证书颁发机构 (CA) | 建立 TLS 连接时要信任的一个或多个证书颁发机构。 |
客户端证书 | 数字证书,允许服务器验证应用程序的身份,以建立加密的网络连接。 |
证书密钥 | 客户端证书私钥文件。此密钥通常包含在证书文件中。 |
密码 | 用于解密客户端私钥(如果已加密)的密码。 |
客户端中的参考证书
您必须在 ClientOptions
对象中引用您的证书,以便服务器可以在客户端连接之前验证这些证书。
我们建议您将 ClientOptions
实例的 TLSConfig
字段设立为 tls.Config
结构,以配置 TLS 连接。tls.Config
结构体是Go原生的,允许您将所有 TLS 选项保留在单个可重用对象中。
要创建 tls.Config
实例,请导入 crypto/tls
和 crypto/x509
软件包。接下来,创建一个 tls.Config
结构体实例并为您的配置设立相关的结构体字段,如下节所示。
要学习;了解有关tls.Config
结构的详情,请参阅 tls.Config API文档。
例子
此示例执行以下操作来创建启用了 TLS 的tls.Config
实例和Client
实例:
创建变量以引用证书文件路径
使用
x509.NewCertPool()
方法创建 CA 文件池并附加 CA 文件的内容使用
tls.LoadX509KeyPair()
方法加载客户端证书文件实例化
tls.Config
结构并设置RootCAs
和Certificates
字段将
tls.Config
实例传递给SetTLSConfig()
方法,以设置ClientOptions
的TLSConfig
字段
caFile := "<path to CA certificate>" certFile := "<path to public client certificate>" keyFile := "<path to private client key>" // Loads CA certificate file caCert, err := os.ReadFile(caFile) if err != nil { panic(err) } caCertPool := x509.NewCertPool() if ok := caCertPool.AppendCertsFromPEM(caCert); !ok { panic("Error: CA file must be in PEM format") } // Loads client certificate files cert, err := tls.LoadX509KeyPair(certFile, keyFile) if err != nil { panic(err) } // Instantiates a Config instance tlsConfig := &tls.Config{ RootCAs: caCertPool, Certificates: []tls.Certificate{cert}, } uri := "<connection string>" // Sets TLS options in options instance opts := options.Client().ApplyURI(uri).SetTLSConfig(tlsConfig)
不安全选项
在tls.Config
实例中,您可以设置可选字段来配置连接上的 TLS。 出于测试目的,您可以将InsecureSkipVerify
字段设置为true
。
警告
将 InsecureSkipVerify
字段设置为 true
会同时禁用证书和主机名验证。
在生产环境中指定此选项会使应用程序不安全,并且可能容易受到过期证书和冒充有效客户端实例的外部进程的攻击。
更多信息
要学习;了解有关在连接上启用 TLS 的更多信息,请参阅MongoDB Server手册中的以下文档:
API 文档
要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档: