文档菜单
文档首页
/ / /
C驱动程序
/

配置传输层安全(TLS)

在本页中

  • 概述
  • 启用TLS
  • 指定CA文件
  • 服务器证书验证
  • 支持的库
  • OpenSSL
  • LibreSSL / libtls (已弃用)
  • Windows上的原生TLS支持(安全通道)
  • macOS / Darwin上的原生TLS支持(安全传输)
  • API 文档

在本指南中,您可以了解如何使用TLS 协议以确保您与 MongoDB 部署的连接安全。

当您启用连接的 TLS 时,C 驱动程序将执行以下操作

  • 使用 TLS 连接到 MongoDB 部署

  • 验证部署的证书

  • 确保证书验证了部署

要了解如何为 MongoDB 部署配置 TLS,请参阅 MongoDB 服务器手册中的 TLS 配置指南

注意

关于 TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构(CA)的完整描述超出了本文档的范围。本页面假定您已了解 TLS/SSL 并有权访问有效证书。

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

  • 设置tls 参数在您的连接字符串中

  • 使用 mongoc_uri_set_option_as_bool() 函数将 MONGOC_URI_TLS 连接选项设置为 true

mongoc_client_t *client = mongoc_client_new ("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true");
// Do database work here
mongoc_client_destroy (client);
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017");
mongoc_uri_set_option_as_bool (uri, MONGOC_URI_TLS, true);
mongoc_client_t *client = mongoc_client_new_from_uri (uri);
// Do database work here
mongoc_client_destroy (client);
mongoc_uri_destroy (uri);

提示

如果您的连接字符串包含 +srv 修改,该修改指定了 SRV 连接格式,则默认启用 TLS。

要了解更多关于 SRV 连接格式的信息,请参阅 MongoDB 服务器文档中的 SRV 连接格式

当使用TLS连接到启用TLS的MongoDB部署时,默认情况下,部署将要求客户端提供由证书颁发机构签发的客户端证书,或者服务器上使用的本地证书存储信任的机构签发的证书。

您可以通过以下方式提供客户端证书

  • 将连接字符串中的 tlscertificatekeyfile 参数设置为包含根证书链的 .pem 文件

  • 使用 mongoc_uri_set_option_as_utf8() 函数将 MONGOC_URI_TLSCERTIFICATEKEYFILE 选项设置为包含根证书链的 .pem 文件

mongoc_client_t *client = mongoc_client_new ("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true&tlscertificatekeyfile=/path/to/certs/client-certificate.pem");
// Do database work here
mongoc_client_destroy (client);
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017");
mongoc_uri_set_option_as_bool (uri, MONGOC_URI_TLS, true);
mongoc_uri_set_option_as_utf8 (uri, MONGOC_URI_TLSCERTIFICATEKEYFILE, "/path/to/client-certificate.pem");
mongoc_client_t *client = mongoc_client_new_from_uri (uri);
// Do database work here
mongoc_client_destroy (client);
mongoc_uri_destroy (uri);

MongoDB C驱动程序将自动验证由配置的证书颁发机构签发的服务器证书的有效性。驱动程序还执行主机名验证和吊销检查。

要覆盖此行为,可以禁用主机名验证、OCSP端点吊销检查、所有吊销检查,并允许无效证书。

此行为由 tlsAllowInvalidHostnamestlsDisableOCSPEndpointChecktlsDisableCertificateRevocationChecktlsAllowInvalidCertificates 选项控制。默认情况下,所有这些均设置为 false

不建议更改这些默认设置,因为您可能会使您的客户端面临以下安全风险

  • 中间人攻击当设置tlsAllowInvalidHostnames

  • 无效证书,当设置tlsAllowInvalidCertificates

  • 可能被撤销的证书,当设置tlsDisableOCSPEndpointChecktlsDisableCertificateRevocationCheck

默认情况下,libmongoc将尝试找到支持的TLS库并启用TLS支持。这由cmake标志ENABLE_SSL控制,该标志默认设置为AUTO。此标志接受以下值

  • AUTO:链接到系统的原生TLS库,或尝试找到OpenSSL。这是默认值。

  • OPENSSL:链接到OpenSSL(libssl)。可以通过OPENSSL_ROOT指定一个可选的安装路径。

  • LIBRESSL(已弃用):链接到LibreSSL的libtls。您可以通过设置OPENSSL来链接到与LibreSSL兼容的libssl。

  • WINDOWS:链接到Windows的本地TLS库Secure Channel。

  • DARWIN:链接到macOS的本地TLS库Secure Transport。

  • OFF:禁用TLS支持。

MongoDB C 驱动程序在 Linux 和 Unix 平台上使用 OpenSSL(macOS 除外)。行业最佳实践和一些法规要求使用 TLS 1.1 或更高版本,这需要至少 OpenSSL 1.0.1。使用以下命令检查您的 OpenSSL 版本

openssl version

确保您的系统 OpenSSL 是最新版本(至少 1.0.1),或者使用以下命令在非系统路径中安装最新版本并对其进行构建

cmake -DOPENSSL_ROOT_DIR=/absolute/path/to/openssl

当与 OpenSSL 编译时,驱动程序将尝试加载系统默认证书存储,这由发行版配置。可以通过设置 tlsCAFile URI 选项或通过在 mongoc_ssl_opt_t. 中的 ca_fileca_dir 字段来覆盖

当使用 OpenSSL 1.0.1+ 时,完全支持在线证书状态协议 (OCSP)。但是,当使用 mongoc_ssl_opt_tcrl_file 撤销服务器证书时,即使证书有一个有效的附加 OCSP 响应,证书也被视为已撤销。

提示

有关OCSP的更多信息,请参阅RFC 6960。

当配置为针对openssl编译时,MongoDB C Driver通过使用OpenSSL兼容性检查支持LibreSSL。它还支持配置为针对libressl构建的新libtls库。

当使用LibreSSL编译时,mongoc_ssl_opt_tcrl_file选项不受支持,如果使用将报错。设置tlsDisableOCSPEndpointChecktlsDisableCertificateRevocationCheck无效。

在线证书状态协议(OCSP)部分支持,以下为注意事项:

  • 必须 stapling 扩展(参见 RFC 7633)被忽略

  • 如果客户端在没有 stapled 响应的情况下提交了 Must-Staple 证书,并且 OCSP 响应者已关闭,则连接将继续

  • 如果客户端从 OCSP 响应者那里收到了吊销响应,则连接将不会继续

提示

有关OCSP的更多信息,请参阅RFC 6960。

MongoDB C 驱动程序支持 Windows 原生 TLS 库(安全通道或 SChannel)及其原生加密库(加密 API:下一代或 CNG)。

当与 Windows 原生库编译时,mongoc_ssl_opt_tca_dir 选项不受支持,如果使用则会引发错误。

使用tlsCertificateKeyPassword URI选项设置的加密PEM文件也不受支持,尝试加载时将导致错误。

当设置tlsCAFile时,驱动程序将只允许由一个或多个提供者签发的服务器证书。如果没有设置tlsCAFile,驱动程序将使用System Local Machine Root证书存储来查找证书授权机构,以确认提供的证书。

当使用mongoc_ssl_opt_tcrl_file设置后,驱动程序将撤销列表导入到System Local Machine Root证书存储。

设置tlsDisableOCSPEndpointCheck没有效果。

在线证书状态协议(OCSP)部分支持,以下为注意事项:

  • 必须安装扩展(见RFC 7633)被忽略。

  • 如果没有 stapled 响应且 OCSP 响应者不可用,连接将继续,即使提供了必须安装的证书。

  • 如果客户端从 OCSP 响应者收到撤销响应,则连接不会继续。

  • 当使用 mongoc_ssl_opt_tcrl_file 设置为,并且 crl_file 撤销了服务器的证书时,OCSP 响应优先。例如,如果服务器提供了一个有效的附加 OCSP 响应的证书,即使 crl_file 将其标记为已撤销,证书也被认为是有效的。

提示

有关OCSP的更多信息,请参阅RFC 6960。

MongoDB C 驱动程序同时支持 Darwin 原生 TLS 库和其原生加密库 Common Crypto。

当与 Secure Transport 编译时,不支持 mongoc_ssl_opt_tca_dircrl_file 选项。如果使用任一选项,将引发错误。

当设置 tlsCAFile 时,驱动程序将只允许由提供(或提供者)的权威机构签发的服务器证书。如果没有设置 tlsCAFile,驱动程序将使用未锁定的密钥链中的证书权威机构。

设置 tlsDisableOCSPEndpointChecktlsDisableCertificateRevocationCheck 在针对安全传输编译时没有效果。

在线证书状态协议(OCSP)部分支持,以下是一些注意事项。

  • 必须 stapling 扩展(参见 RFC 7633)被忽略

  • 如果客户端在没有 stapled 响应的情况下提交了 Must-Staple 证书,并且 OCSP 响应者已关闭,则连接将继续

  • 如果客户端从 OCSP 响应者那里收到了吊销响应,则连接将不会继续

提示

有关OCSP的更多信息,请参阅RFC 6960。

有关本指南中提到的对象和函数的更多信息,请参阅以下 API 文档

返回

选择连接目标