Docs Menu
Docs Home
/ /

Configurar la Seguridad de la Capa de Transporte (TLS)

En esta guía, podrá aprender a utilizar el ProtocoloTLS para proteger su conexión a una implementación de MongoDB.

Cuando habilita TLS para una conexión, el controlador C realiza las siguientes acciones:

  • Utiliza TLS para conectarse a la implementación de MongoDB

  • Verifica el certificado de la implementación

  • Asegura que el certificado certifique la implementación

Para saber cómo configurar su implementación de MongoDB para TLS, consulte la guía de configuración de TLS en el manual de MongoDB Server.

Nota

Una descripción completa de los certificados TLS/SSL, PKI (Infraestructura de Clave Pública) y las Autoridades de Certificación (CA) queda fuera del alcance de este documento. Esta página presupone conocimientos previos de TLS/SSL y acceso a certificados válidos.

Puede habilitar TLS en una conexión a su instancia de MongoDB de las siguientes maneras:

  • Configuración de la tls parámetro en su cadena de conexión

  • Usando la función mongoc_uri_set_option_as_bool() para establecer la opción de conexión MONGOC_URI_TLS en 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);

Tip

Si su cadena de conexión incluye la modificación +srv, que especifica el formato de conexión SRV, TLS estará habilitado en su conexión de manera predeterminada.

Para obtener más información sobre el formato de conexión SRV, consulte Formato de conexión SRV en la documentación de MongoDB Server.

Cuando se conecta a una implementación de MongoDB con TLS habilitado, la implementación requerirá de manera predeterminada que el cliente proporcione un certificado de cliente emitido por una autoridad de certificación o una autoridad en la que confíe el almacén de certificados nativo en uso en el servidor.

Puede proporcionar el certificado de cliente de las siguientes maneras:

  • Establecer el parámetro tlsCertificateKeyFile en su cadena de conexión en un archivo .pem que contiene la cadena de certificado raíz

  • Usar la función mongoc_uri_set_option_as_utf8() para establecer la opción MONGOC_URI_TLSCERTIFICATEKEYFILE en un archivo .pem que contenga la cadena de certificados raíz

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

El controlador C de MongoDB verificará automáticamente la validez de un certificado de servidor emitido por la autoridad de certificación configurada. El controlador también realiza la validación del nombre de host y la comprobación de revocació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, todas las verificaciones de revocación y permitir certificados no válidos.

Este comportamiento se controla mediante las opciones tlsAllowInvalidHostnames, tlsDisableOCSPEndpointCheck, tlsDisableCertificateRevocationCheck y tlsAllowInvalidCertificates. De forma predeterminada, todas están configuradas en false.

No se recomienda cambiar estos valores predeterminados, ya que podría exponer a su cliente a los siguientes riesgos de seguridad:

  • El hombre en el medio ataca cuando tlsAllowInvalidHostnames se establece

  • Certificados no válidos, cuando se establece tlsAllowInvalidCertificates

  • Certificados potencialmente revocados, cuando se establecen tlsDisableOCSPEndpointCheck o tlsDisableCertificateRevocationCheck

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. Este indicador acepta los siguientes valores:

  • AUTO: Enlace a la biblioteca TLS nativa del sistema o intenta encontrar OpenSSL. Este es el valor predeterminado.

  • OPENSSLEnlaces a OpenSSL (libssl). Se puede especificar una ruta de instalación opcional con OPENSSL_ROOT.

  • WINDOWS:Enlaces a Secure Channel, la biblioteca TLS nativa en Windows.

  • DARWIN:Enlaces a Secure Transport, la biblioteca TLS nativa en macOS.

  • OFF:Desactiva la compatibilidad con TLS.

El controlador C de MongoDB utiliza OpenSSL 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. Utilice el siguiente comando para comprobar su versión de OpenSSL:

openssl version

Asegúrese de que la versión de OpenSSL de su sistema sea reciente (al menos 1.0.1) o utilice el siguiente comando para instalar una versión reciente en una ruta que no sea del sistema y compilarla en ella:

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 en Línea (OCSP) es totalmente compatible con OpenSSL 1.0.1+. Sin embargo, cuando crl_file se establece un con mongoc_ssl_opt_t y el crl_file revoca el certificado del servidor, este se considera revocado, incluso si tiene una respuesta OCSP válida.

Tip

Para obtener más información sobre OCSP, consulte RFC.6960

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

Al compilar con las bibliotecas nativas de Windows, la ca_dir opción de mongoc_ssl_opt_t no es compatible y genera un error si se utiliza. Los archivos PEM cifrados, configurados mediante la tlsCertificateKeyPassword opción URI, tampoco son compatibles y generan errores al intentar cargarlos.

La tlsCertificateKeyFile opción URI puede hacer referencia a un certificado codificado en formato PKCS#8 o PKCS#.1 A partir 2.1.0 de la versión del controlador C, este importa la clave privada como una clave persistente para admitir algoritmos de firma modernos. En versiones anteriores, el controlador importaba la clave como efímera. Para obtener más información sobre la administración de claves importadas, consulte Administración de claves importadas.

Cuando se establece tlsCAFile, el driver importa el archivo de la Autoridad Certificadora al almacén de certificados System Local Machine Root. Cuando no se configura tlsCAFile, el driver busca el archivo de la Autoridad Certificadora utilizando el almacén de certificados System Local Machine Root para confirmar el certificado proporcionado.

Cuando se establece crl_file con mongoc_ssl_opt_t, el driver importa la lista de revocación al almacén de certificados System Local Machine Root. Establecer tlsDisableOCSPEndpointCheck no tiene efecto.

El Protocolo de estado de certificado en línea (OCSP) es parcialmente compatible con las siguientes notas:

  • Se ignora la extensión Must-Staple (ver RFC).7633

  • La conexión continuará si se presenta un certificado Must-Staple sin una respuesta grapada y el respondedor OCSP no está disponible.

  • La conexión no continuará si el cliente recibe una respuesta revocada de un respondedor OCSP.

  • Cuando crl_file se establece un con mongoc_ssl_opt_t y el crl_file revoca 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 lo crl_file marca como revocado.

Tip

Para obtener más información sobre OCSP, consulte RFC.6960

El controlador C importa8 claves PKCS# al KSP de CNG: Microsoft Software Key Storage Provider e importa1 claves PKCS# al CSP de CryptoAPIMicrosoft Enhanced Cryptographic Provider v1.0 heredado:. Para obtener más información sobre la importación de claves, consulte Almacenamiento y recuperación de claves en la documentación de Microsoft.

Después de importar las claves, es posible que deba calcular el nombre y el proveedor de la clave, verla o eliminarla. El siguiente código de PowerShell calcula el nombre y los proveedores de la clave:

$cert = "client.pem"
# Compute the SHA256 fingerprint:
$fingerprint = (openssl x509 -in $cert -noout -fingerprint -sha256) -replace 'SHA256 Fingerprint=', '' -replace ':', ''
if (Select-String -Path $cert -Pattern '-----BEGIN RSA PRIVATE KEY-----' -Quiet) {
# Key name for PKCS#1 key:
$key_name = "libmongoc-$fingerprint-pkcs1"
$csp = "Microsoft Enhanced Cryptographic Provider v1.0"
} elseif (Select-String -Path $cert -Pattern '-----BEGIN PRIVATE KEY-----' -Quiet) {
# Key name for PKCS#8 key:
$key_name = "libmongoc-$fingerprint-pkcs8"
$csp = "Microsoft Software Key Storage Provider"
} else {
Write-Output "Unexpected PEM format for $cert"
}

El siguiente código de PowerShell muestra detalles sobre la clave:

certutil -user -csp $csp -key $key_name

El siguiente código de PowerShell elimina la clave:

certutil -user -csp $csp -key $key_name

El controlador MongoDB C admite tanto la biblioteca TLS nativa de Darwin como Common Crypto, su biblioteca de criptografía nativa.

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 desbloqueadas.

La configuración de tlsDisableOCSPEndpointCheck y tlsDisableCertificateRevocationCheck no tiene efecto al compilar contra transporte seguro.

El Protocolo de estado de certificado en línea (OCSP) es parcialmente compatible con las siguientes notas.

  • La extensión Must-Staple (ver 7633RFC) se ignora

  • La conexión continuará si se presenta un certificado Must-Staple sin una respuesta grapada y el respondedor OCSP no está disponible

  • La conexión no continuará si el cliente recibe una respuesta revocada de un respondedor OCSP

Tip

Para obtener más información sobre OCSP, consulte RFC.6960

Para obtener más información sobre los objetos y funciones mencionados en esta guía, consulte la siguiente documentación de API:

Volver

Seguridad

En esta página