Configuración con opciones de URI
Habilite TLS incluyendo tls=true en la URI.
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);
Las siguientes opciones de URI se pueden utilizar para configurar aún más TLS:
Constante | Clave | Descripción |
|---|---|---|
MONGOC_URI_TLS | tls | {true|false}, que indica si se debe utilizar TLS. |
MONGOC_URI_TLSCERTIFICATEKEYFILE | tlscertificatekeyfile | Ruta a la clave privada con formato PEM, con su certificado público concatenado al final. |
MONGOC_URI_TLSCERTIFICATEKEYFILEPASSWORD | clave de certificado tlscontraseña | La contraseña, si existe alguna, que se utilizará para desbloquear la clave privada cifrada. |
MONGOC_URI_TLSCAFILE | archivo tlsca | Una o un conjunto de autoridades de certificación que deben considerarse confiables. |
MONGOC_URI_TLSALLOWINVALIDCERTIFICATES | tlsallowinvalidcertificates | Aceptar e ignorar errores de verificación de certificado (por ejemplo, emisor no confiable, vencido, etc.) |
MONGOC_URI_TLSALLOWINVALIDHOSTNAMES | tlspermitirhostnamesinválidos | Ignorar la verificación del nombre de host del certificado (por ejemplo, Man In The Middle, que utiliza un certificado válido, pero emitido para otro nombre de host) |
MONGOC_URI_TLSINSECURE | tlsinsecure | {true|false}, que indica si se deben usar opciones TLS inseguras. Actualmente, esto implica MONGOC_URI_TLSALLOWINVALIDCERTIFICATES y MONGOC_URI_TLSALLOWINVALIDHOSTNAMES. |
MONGOC_URI_TLSDISABLECERTIFICATEREVOCATIONCHECK | tlsdisablecertificaterevocationcheck | {true|false}, indica si se debe deshabilitar la verificación de revocación (CRL / OCSP). |
MONGOC_URI_TLSDISABLEOCSPENDPOINTCHECK | tlsdisableocspendpointcheck | {true|false}, indica si no se deben solicitar los puntos finales del respondedor OCSP cuando una respuesta OCSP no está engrapada. |
Configuración con mongoc_ssl_opt_t
Alternativamente, el La estructuramongoc_ssl_opt_t se puede usar para configurar TLS con mongoc_client_set_ssl_opts o mongoc_client_pool_set_ssl_opts. La mayoría de las opciones configurables se pueden configurar mediante la URI de la cadena de conexión.
mongoc_ssl_opt_t key | Clave URI |
|---|---|
pem_file | tlsClientCertificateKeyFile |
pem_pwd | Clave de certificado de cliente tlsContraseña |
ca_file | tlsCAFile |
validación de certificado débil | tlsPermitirCertificadosInválidos |
allow_invalid_hostname | tlsAllowInvalidHostnames |
Las únicas exclusiones son crl_file y ca_dir. Solo se pueden establecer con mongoc_ssl_opt_t.
Autenticación del cliente
Cuando MongoDB se inicia con TLS habilitado, de manera predeterminada requerirá que el cliente proporcione un certificado de cliente emitido por una autoridad de certificación especificada por --tlsCAFile, o una autoridad en la que confíe el almacén de certificados nativo en uso en el servidor.
Para proporcionar el certificado de cliente, configure tlsCertificateKeyFile en la URI en un archivo de certificado blindado 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);
Verificación del certificado del servidor
El controlador MongoDB C verificará automáticamente la validez del certificado del servidor, como el emitido por la autoridad de certificación configurada, la validación del nombre de host y la expiración.
Para sobrescribir este comportamiento, es posible deshabilitar la validación del nombre de host, la verificación de revocación del punto final de OCSP, la verificación de revocación por completo y permitir certificados no válidos.
Este comportamiento se controla mediante las opciones tlsAllowInvalidHostnames, tlsDisableOCSPEndpointCheck, tlsDisableCertificateRevocationCheck y tlsAllowInvalidCertificates, respectivamente. De forma predeterminada, todas están configuradas en false.
No se recomienda cambiar estos valores predeterminados ya que expone al cliente a ataques Man In The Middle (cuando tlsAllowInvalidHostnames se configura), certificados no válidos (cuando se configura) tlsAllowInvalidCertificates o certificados potencialmente revocados (cuando tlsDisableOCSPEndpointCheck se tlsDisableCertificateRevocationCheck configuran o).
Bibliotecas compatibles
De forma predeterminada, libmongoc intentará encontrar una biblioteca TLS compatible y habilitará la compatibilidad con TLS. Esto se controla mediante el indicador cmake ENABLE_SSL, que está configurado en AUTO por defecto. Los valores válidos son:
AUTOComportamiento predeterminado. Vincule a la biblioteca TLS nativa del sistema o intente encontrar OpenSSL.DARWINEnlace a Secure Transport, la biblioteca TLS nativa en macOS.WINDOWSEnlace a Secure Channel, la biblioteca TLS nativa en Windows.OPENSSLEnlace a OpenSSL (libssl). Se puede especificar una ruta de instalación opcional conOPENSSL_ROOT.LIBRESSLEnlace a las libtls de LibreSSL. (Se puede crear un enlace a las libtls compatibles con LibreSSL configurandoOPENSSL).OFFDeshabilitar el soporte TLS.
OpenSSL
El controlador C de MongoDB utiliza OpenSSL, si está disponible, en plataformas Linux y Unix (excepto macOS). Las mejores prácticas de la industria y algunas normativas exigen el uso de TLS 1.1 o superior, lo que requiere al menos OpenSSL 1.0.1. Compruebe su versión de OpenSSL de la siguiente manera:
$ openssl version
Asegúrese de que la versión de OpenSSL de su sistema sea reciente (al menos 1.0.1) o instale una versión reciente en una ruta que no sea del sistema y compile contra ella con:
cmake -DOPENSSL_ROOT_DIR=/absolute/path/to/openssl
Al compilarse con OpenSSL, el controlador intentará cargar el almacén de certificados predeterminado del sistema, según la configuración de la distribución. Esto se puede anular configurando la tlsCAFile opción URI o con los campos ca_file y ca_dir en mongoc_ssl_opt_t.
El Protocolo de estado de certificado 6960en línea (OCSP) (consulte RFC) es totalmente compatible cuando se utiliza OpenSSL..1 01+ con las siguientes notas:
Cuando
crl_filese establece un con mongoc_ssl_opt_t y elcrl_filerevoca el certificado del servidor, el certificado se considera revocado (incluso si el certificado tiene una respuesta OCSP engrapada válida)
LibreSSL / libtls
El controlador C de MongoDB es compatible con LibreSSL mediante comprobaciones de compatibilidad con OpenSSL cuando se configura para compilar con openssl. También es compatible con la nueva biblioteca libtls cuando se configura para compilar con libressl.
Cuando se compila con las bibliotecas nativas de Windows, la crl_file opción de mongoc_ssl_opt_t no es compatible y emitirá un error si se utiliza.
La configuración tlsDisableOCSPEndpointCheck y tlsDisableCertificateRevocationCheck no tiene ningún efecto.
El Protocolo de estado de certificado en línea (OCSP) (consulte 6960RFC) es parcialmente compatible con las siguientes notas:
La extensión Must-Staple (ver 7633RFC) se ignora. La conexión puede continuar si
El certificado Must-Staple se presenta sin una respuesta adherida (a menos que el cliente reciba una respuesta revocada de un respondedores OCSP).
La conexión continuará si se presenta un certificado Must-Staple sin una respuesta grapada y el respondedor OCSP no está disponible.
Compatibilidad nativa con TLS en Windows (canal seguro)
El controlador C de MongoDB admite la biblioteca TLS nativa de Windows (Secure Channel o SChannel) y su biblioteca de criptografía nativa (Cryptography API: Next Generation o CNG).
Cuando se compila con las bibliotecas nativas de Windows, la ca_dir opción de mongoc_ssl_opt_t no es compatible y emitirá un error si se utiliza.
Los archivos PEM cifrados (por ejemplo, configuración tlsCertificateKeyPassword) tampoco son compatibles y generarán un error al intentar cargarlos.
Si se configura tlsCAFile, el controlador solo permitirá certificados de servidor emitidos por la(s) autoridad(es) proporcionada(s). Si no se configura tlsCAFile, el controlador buscará la autoridad de certificación utilizando el almacén de certificados System Local Machine Root para confirmar el certificado proporcionado.
Cuando crl_file se configura con mongoc_ssl_opt_t, el controlador importará la lista de revocación al System Local Machine Root almacén de certificados.
La configuración tlsDisableOCSPEndpointCheck no tiene ningún efecto.
El Protocolo de estado de certificado en línea (OCSP) (consulte 6960RFC) es parcialmente compatible con las siguientes notas:
Se ignora la extensión Must-Staple (véase 7633RFC). La conexión puede continuar si se presenta un certificado Must-Staple sin respuesta grapada (a menos que el cliente reciba una respuesta revocada de un respondedor OCSP).
Cuando
crl_filese establece un con mongoc_ssl_opt_t y elcrl_filerevoca el certificado del servidor, la respuesta OCSP tiene prioridad. Por ejemplo, si el servidor presenta un certificado con una respuesta OCSP válida, este se considera válido incluso si el locrl_filemarca como revocado.La conexión continuará si se presenta un certificado Must-Staple sin una respuesta grapada y el respondedor OCSP no está disponible.
Compatibilidad nativa con TLS en macOS/Darwin (transporte seguro)
El controlador MongoDB C admite la biblioteca TLS nativa de Darwin (OS X, macOS, iOS, etc.) (Secure Transport) y su biblioteca de criptografía nativa (Common Crypto o CC).
Al compilar con Secure Transport, no se ca_dir crl_file admiten las opciones y de mongoc_ssl_opt_t. Si se utiliza alguna de ellas, se genera un error.
Si se configura tlsCAFile, el controlador solo permitirá certificados de servidor emitidos por la(s) autoridad(es) proporcionada(s). Si no se configura tlsCAFile, el controlador utilizará las autoridades de certificación de las cadenas de claves actualmente desbloqueadas.
La configuración tlsDisableOCSPEndpointCheck y tlsDisableCertificateRevocationCheck no tiene ningún efecto.
El Protocolo de estado de certificado en línea (OCSP) (consulte 6960RFC) es parcialmente compatible con las siguientes notas.
Se ignora la extensión Must-Staple (véase 7633RFC). La conexión puede continuar si se presenta un certificado Must-Staple sin respuesta grapada (a menos que el cliente reciba una respuesta revocada de un respondedor OCSP).
La conexión continuará si se presenta un certificado Must-Staple sin una respuesta grapada y el respondedor OCSP no está disponible.