Overview
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.
Habilitar TLS
Puede habilitar TLS en una conexión a su instancia de MongoDB de las siguientes maneras:
Configuración de la
tlsparámetro en su cadena de conexiónUsando la función
mongoc_uri_set_option_as_bool()para establecer la opción de conexiónMONGOC_URI_TLSentrue
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.
Especificar un certificado de cliente
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
tlsCertificateKeyFileen su cadena de conexión en un archivo.pemque contiene la cadena de certificado raízUsar la función
mongoc_uri_set_option_as_utf8()para establecer la opciónMONGOC_URI_TLSCERTIFICATEKEYFILEen un archivo.pemque contenga la cadena de certificados raíz
Verificación del certificado del servidor
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
tlsAllowInvalidHostnamesse estableceCertificados no válidos, cuando se establece
tlsAllowInvalidCertificatesCertificados potencialmente revocados, cuando se establecen
tlsDisableOCSPEndpointCheckotlsDisableCertificateRevocationCheck
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. 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 conOPENSSL_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.
OpenSSL
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
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).
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_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.
Tip
Para obtener más información sobre OCSP, consulte RFC.6960
Administrar claves importadas
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
Compatibilidad nativa con TLS en macOS/Darwin (transporte seguro)
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
Documentación de la API
Para obtener más información sobre los objetos y funciones mencionados en esta guía, consulte la siguiente documentación de API: