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

配置 TLS

在此页面上

  • 使用 URI 选项进行配置
  • 使用 mongoc_ssl_opt_t 进行配置
  • 客户端身份验证
  • MongoDB Server证书验证
  • 支持的库
  • OpenSSL
  • LibreSSL / libtls
  • Windows上的原生 TLS 支持(安全通道)
  • macOS / Darwin 上的原生 TLS 支持(安全传输)

通过在 URI 中包含 tls=true来启用 TLS。

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);

以下 URI 选项可用于进一步配置 TLS:

恒定
说明
MONGOC_URI_TLS
TLS
{true|false},指示是否必须使用 TLS。
MONGOC_URI_TLSCERTIFICATEKEYFILE
tlscertificatekeyfile
PEM 格式私钥的路径,其公共证书连接在末尾。
MONGOC_URI_TLSCERTIFICATEKEYFILEPASSWORD
tlscertificatekeypassword
用于解锁加密私钥的密码(如有)。
MONGOC_URI_TLSCAFILE
tlsCAFile
应视为可信的一个或多个证书颁发机构。
MONGOC_URI_TLSALLOWINVALIDCERTIFICATES
tlsAllowInvalidCertificates
接受并忽略证书验证错误(例如 不受信任的发行者、已过期等)
MONGOC_URI_TLSALLOWINVALIDHOSTNAMES
tlsAllowInvalidHostnames
忽略证书的主机名验证(例如 中间人,使用有效的证书,但为另一个主机名颁发)
MONGOC_URI_TLSINSECURE
tlsInsecure
{true|false},指示是否应使用不安全的 TLS 选项。 目前,这意味着 MONGOC_URI_TLSALLOWINVALIDCERTIFICATES 和 MONGOC_URI_TLSALLOWINVALIDHOSTNAMES。
MONGOC_URI_TLSDISABLECERTIFICATEREVOCATIONCHECK
tlsdisablecertificatereplicationcheck
{true|false},表示是否应禁用撤销检查 (CRL / OCSP)。
MONGOC_URI_TLSDISABLEOCSPENDPOINTCHECK
tlsdisableocspendpointcheck
{true|false},表示未装订 OCSP 响应时是否不应请求 OCSP 响应程序端点。

或者, mongoc_ssl_opt_t struct 可用于通过 mongoc_client_set_ssl_opts 配置 TLS 或 mongoc_client_pool_set_ssl_opts 。大多数可配置选项都可以使用连接string URI进行设立。

mongoc_ssl_opt_t key
URI 键
pem_file
tlsClientCertificateKeyFile
pem_pwd
tlsClientCertificateKeyPassword
ca_file
tlsCAFile
weak_cert_validation
tlsAllowInvalidCertificates
allow_invalid_hostname
tlsAllowInvalidHostnames

唯一的排除项是crl_fileca_dir 。 这些只能使用 mongoc_ssl_opt_t 来设立。

当MongoDB在启用 TLS 的情况下启动时,默认会要求客户端提供由--tlsCAFile指定的证书颁发机构或服务器上使用的原生证书存储区信任的颁发机构颁发的客户端证书。

要提供客户端证书,请将 URI 中的tlsCertificateKeyFile设立为 PEM 封装证书文件。

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);

MongoDB C驱动程序将自动验证服务器证书的有效性,例如由配置的证书颁发机构颁发的证书、主机名验证和过期时间。

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

此行为可分别使用tlsAllowInvalidHostnamestlsDisableOCSPEndpointChecktlsDisableCertificateRevocationChecktlsAllowInvalidCertificates选项进行控制。 默认情况下,全部设置为false

不建议更改这些默认值,因为这会使客户端遭受中间人攻击(当设立tlsAllowInvalidHostnames时)、无效证书(当设立tlsAllowInvalidCertificates时)或可能被撤销的证书(当tlsDisableOCSPEndpointChecktlsDisableCertificateRevocationCheck已设立)。

默认,libmongoc 将尝试查找支持的 TLS 库并启用TLS支持。 它由 cmake 标志ENABLE_SSL控制,默认设立为AUTO 。 有效值为:

  • AUTO 默认行为。 链接到系统的原生TLS 库,或尝试查找 OpenSSL。

  • DARWIN 链接到安全传输,即 macOS 上的原生 TLS 库。

  • WINDOWS 链接到安全通道,即 Windows 上的本机 TLS 库。

  • OPENSSL 链接到 OpenSSL (libssl)。 可以使用OPENSSL_ROOT指定可选的安装路径。

  • LIBRESSL 链接到 LibreSSL 的 libtls。 (可以通过设置OPENSSL链接到 LibreSSL 的兼容 libssl)。

  • OFF 禁用 TLS支持。

MongoDB C 驱动程序在 Linux 和 Unix 平台(macOS 除外)上使用 OpenSSL(如果可用)。 行业最佳实践和某些法规要求使用 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 选项或使用ca_file ca_dirmongoc_ssl_opt_t 中的字段 和 来覆盖它。

在线证书状态协议 (OCSP)(请参阅 RFC6960 )在使用 OpenSSL1 时受到完全支持。0 。1 +包含以下注释:

  • 当使用crl_file mongoc_ssl_opt_t 设立 时 ,且crl_file 撤销了服务器的证书,则该证书被视为已撤销(即使该证书具有有效的装订 OCSP 响应)

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

针对Windows原生库进行编译时,crl_file mongoc_ssl_opt_t 的 选项 不受支持,使用时会出现错误。

设置tlsDisableOCSPEndpointChecktlsDisableCertificateRevocationCheck无效。

在线证书状态协议 (OCSP)(请参阅 RFC6960 )由以下注释部分支持:

  • Must-Staple 扩展(请参阅 RFC7633 )被忽略。连接可能会继续,如果

  • 提供必须装订证书时没有装订响应(除非客户端收到来自 OCSP 响应程序的已撤销响应)。

  • 如果提供了必须装订证书而没有装订响应,并且 OCSP 响应程序已关闭,则连接将继续。

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

针对Windows原生库进行编译时,ca_dir mongoc_ssl_opt_t 的 选项 不受支持,使用时会出现错误。

也不支持加密的 PEM 文件(例如,设置tlsCertificateKeyPassword ),并且在尝试加载这些文件时会导致错误。

设立tlsCAFile时,驾驶员将仅允许由所提供的一个或多个颁发机构颁发的服务器证书。 如果未设立tlsCAFile ,驾驶员将使用System Local Machine Root证书存储区查找证书颁发机构,以确认所提供的证书。

当使用crl_file mongoc_ssl_opt_t 设立了 时 ,驾驶员会将吊销列表导入System Local Machine Root 证书存储。

设置tlsDisableOCSPEndpointCheck无效。

在线证书状态协议 (OCSP)(请参阅 RFC6960 )由以下注释部分支持:

  • Must-Staple 扩展(请参阅 RFC7633 )被忽略。如果提供了必须装订证书但没有装订响应,则连接可以继续(除非客户端收到来自 OCSP 响应程序的已撤销响应)。

  • 当使用crl_file mongoc_ssl_opt_t 设立 时 ,且crl_file 撤销了服务器的证书,则 OCSP 响应优先。例如,如果服务器提供的证书带有有效装订的 OCSP 响应,则即使crl_file将其标记为已撤销,该证书也被视为有效。

  • 如果提供了必须装订证书而没有装订响应,并且 OCSP 响应程序已关闭,则连接将继续。

MongoDB C 驱动程序支持 Darwin(OS X、macOS、iOS 等)原生 TLS 库(安全传输)及其原生加密库(Common Crypto 或 CC)。

针对安全传输进行编译时,ca_dir crl_filemongoc_ssl_opt_t 的 和 选项 不受支持。使用任一操作都会发出错误。

设立tlsCAFile时,驾驶员将仅允许由所提供的一个或多个颁发机构颁发的服务器证书。 如果未设立tlsCAFile ,驾驶员将使用当前未锁定的钥匙串中的证书颁发机构。

设置tlsDisableOCSPEndpointChecktlsDisableCertificateRevocationCheck无效。

在线证书状态协议 (OCSP)(请参阅 RFC6960 )由以下注释部分支持。

  • Must-Staple 扩展(请参阅 RFC7633 )被忽略。如果提供了必须装订证书但没有装订响应,则连接可以继续(除非客户端收到来自 OCSP 响应程序的已撤销响应)。

  • 如果提供了必须装订证书而没有装订响应,并且 OCSP 响应程序已关闭,则连接将继续。

后退

指南