Docs Menu
Docs Home
/ /

Configurar la Seguridad de la Capa de Transporte (TLS)

En esta guía, puede aprender a utilizar el protocolo de seguridad de la capa de transporte (TLS) para proteger su conexión a una implementación de MongoDB.

Para conectarse a una implementación de MongoDB mediante TLS, debe realizar los siguientes pasos:

  • Habilitar una conexión TLS en Mongo::Client.

  • Especifique el certificado TLS del cliente.

  • Especifica el certificado de la autoridad certificadora (CA) para verificar el certificado TLS del servidor.

Para aprender a configurar su implementación de MongoDB para TLS, consulte la Guía de configuración de TLS en el manual del servidor MongoDB.

Nota

Esta página presupone conocimientos previos de TLS/SSL y acceso a certificados válidos. Una descripción completa de TLS/SSL, certificados PKI (Infraestructura de Clave Pública) y CA queda fuera del alcance de esta documentación. Para obtener más información sobre TLS, consulte la entrada de Wikipedia sobre Seguridad de la Capa de Transporte.

Puede habilitar TLS para la conexión a su implementación de MongoDB de las siguientes maneras:

  • Establezca la opción ssl en true en un nuevo objeto Mongo:Client.

  • Establezca la opción tls en true en su cadena de conexión.

Nota

Convención de nomenclatura SSL

Todas las versiones de MongoDB Server compatibles con el controlador Ruby v2.6 y posteriores implementan solo TLS. 2.6 y no usan SSL.

Por razones históricas, el driver Ruby antepone las opciones de TLS con ssl en lugar de tls. La versión 3.0 y posteriores del driver Ruby utilizarán el prefijo tls para los nombres de opciones de Ruby.

Para configurar certificados, debe especificar las siguientes opciones:

  • ssl_cert:El archivo de certificado utilizado para verificar la conexión a una implementación de MongoDB.

  • ssl_key:El archivo de clave privada utilizado para verificar la conexión a una implementación de MongoDB.

  • ssl_ca_cert: El archivo que contiene los certificados de CA concatenados que se utilizan para validar los certificados transferidos desde la implementación de MongoDB al cliente. Si no se especifica un valor para esta opción, el controlador utiliza el almacén de certificados raíz del sistema predeterminado como ancla de confianza.

En el siguiente ejemplo, el certificado TLS y la clave privada correspondiente se proporcionan en archivos separados:

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_cert: 'path/to/client.crt',
ssl_key: 'path/to/client.key',
ssl_ca_cert: 'path/to/ca.crt'
)

Puede especificar el certificado TLS y la clave privada en un solo archivo, pero ambas opciones deben especificarse. En el siguiente ejemplo, el certificado TLS y la clave privada se definen en el mismo archivo client.pem:

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_cert: 'path/to/client.pem',
ssl_key: 'path/to/client.pem',
ssl_ca_cert: 'path/to/ca.crt',
)

Para configurar certificados, debe especificar las siguientes opciones de URI:

  • tlsCertificateKeyFile:El archivo que contiene el certificado y el archivo de clave utilizados para verificar la conexión a una implementación de MongoDB.

  • tlsCAFile: El archivo que contiene los certificados de CA concatenados que se utilizan para validar los certificados transferidos desde la implementación de MongoDB al cliente. Si no se especifica un valor para esta opción, el controlador utiliza el almacén de certificados raíz del sistema predeterminado como ancla de confianza.

client = Mongo::Client.new(
"mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=path%2fto%2fclient.pem&tlsCAFile=path%2fto%2fca.crt")

El archivo que contiene el certificado y la clave generalmente tiene una extensión ".crt" o .pem.

Los valores de las opciones de URI deben codificarse con porcentaje. Esto se aplica, por ejemplo, a las barras diagonales (/) en las rutas, que se codifican como %2f.

El controlador Ruby proporciona múltiples opciones para que usted especifique el certificado TLS, la clave y el certificado CA con diferentes tipos de datos u objetos.

Puede proporcionar una de las siguientes opciones para especificar el certificado TLS:

Nombre de la opción
Tipo de dato/objeto aceptado
Descripción

:ssl_cert

String

La ruta del archivo de certificado utilizada para verificar la conexión a una implementación de MongoDB.

:ssl_cert_object

OpenSSL::X509::Certificate

El objeto de certificado utilizado para verificar la conexión a una implementación de MongoDB.

:ssl_cert_string

String

Una cadena que contiene el certificado codificado en PEM utilizado para verificar la conexión a una implementación de MongoDB.

Puede proporcionar una de las siguientes opciones para especificar la clave privada TLS:

Nombre de la opción
Tipo de dato/objeto aceptado
Descripción

:ssl_key

String

La ruta del archivo de clave privada utilizada para verificar la conexión a una implementación de MongoDB.

:ssl_key_object

OpenSSL::PKey

El objeto de clave privada utilizado para verificar la conexión a una implementación de MongoDB.

:ssl_key_pass_phrase

String

Una frase de contraseña para la clave privada.

:ssl_key_string

String

Una cadena que contiene la clave privada codificada en PEM utilizada para verificar la conexión a una implementación de MongoDB.

Puede proporcionar una de las siguientes opciones para especificar el certificado CA TLS:

Nombre de la opción
Tipo de dato/objeto aceptado
Descripción

:ssl_ca_cert

String

La ruta del archivo que contiene los certificados CA concatenados que se utilizan para validar los certificados pasados ​​desde la implementación de MongoDB al cliente.

:ssl_ca_cert_object

Array<OpenSSL::X509::Certificate>

Una matriz de objetos que representan los certificados de CA utilizados para validar los certificados pasados ​​desde la implementación de MongoDB al cliente.

:ssl_ca_cert_string

String

Una cadena que contiene un certificado CA codificado en PEM que se utiliza para validar los certificados pasados ​​desde la implementación de MongoDB al cliente.

Si su configuración de TLS requiere personalización, puede configurar los ganchos de contexto de TLS añadiendo un objeto Ruby nativo Proc a la matriz Mongo.tls_context_hooks. Añada el objeto Proc a la matriz antes de crear cualquier instancia Mongo::Client.

El siguiente ejemplo de código permite el cifrado AES256-SHA como el único cifrado que se utilizará para TLS:

Mongo.tls_context_hooks.push(
Proc.new { |context|
context.ciphers = ["AES256-SHA"]
}
)

Las opciones de contexto TLS del controlador Ruby se basan en la gestión nativa de SSL de Ruby. Para obtener más información sobre las opciones de contexto TLS disponibles, consulte la documentación de Ruby para SSLContext.

Si el certificado proporcionado por el servidor contiene un URI de punto final OCSP, el controlador emite una solicitud de Protocolo de estado de certificado en línea (OCSP) al punto final especificado de manera predeterminada para verificar la validez del certificado.

Para deshabilitar la verificación del punto final de OCSP, configure la opción Ruby :ssl_verify_ocsp_endpoint en false o configure la opción URI tlsDisableOCSPEndpointCheck en true al crear un cliente.

Nota

JRuby no admite la verificación OCSP

Debido a que JRuby no expone correctamente los URI de los puntos finales del OCSP, el controlador no comprueba los puntos finales del OCSP cuando la aplicación subyacente se ejecuta en JRuby.

Cuando TLS está habilitado, el controlador Ruby verifica automáticamente el certificado que presenta el servidor. Al probar su código, puede deshabilitar esta verificación. Esto se conoce como TLS inseguro.

Cuando se habilita TLS inseguro, el controlador solo requiere que el servidor presente un certificado X.509. El controlador acepta un certificado incluso si se cumple alguna de las siguientes condiciones:

  • El nombre de host del servidor y el nombre del sujeto (o nombre alternativo del sujeto) en el certificado no coinciden.

  • El certificado está caducado o aún no es válido.

  • El certificado no tiene un certificado raíz confiable en la cadena.

  • El propósito del certificado no es válido para la identificación del servidor.

Nota

Incluso cuando está habilitado TLS inseguro, la comunicación entre el cliente y el servidor está cifrada con TLS.

Para habilitar TLS inseguro, configure la opción de cliente sslVerify o la opción URI tlsInsecure en true:

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_verify: false
)
client = Mongo::Client.new('mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true')

De igual modo, puedes establecer las siguientes opciones para deshabilitar la verificación del certificado o nombre de host:

  • ssl_verify_certificate:Deshabilite la validación del certificado configurando la opción en false.

  • ssl_verify_hostname:Deshabilite la verificación del nombre de host configurando la opción en false.

  • tlsAllowInvalidCertificates:Deshabilite la validación del certificado configurando la opción en true.

  • tlsAllowInvalidHostnames: Deshabilite la validación del nombre de host configurando la opción en true.

Advertencia

No utilice TLS inseguro en producción

Deshabilite siempre TLS inseguro en producción.

Habilitar TLS inseguro en un entorno de producción hace que su aplicación sea insegura y potencialmente vulnerable a certificados vencidos y procesos externos que se hacen pasar por instancias de cliente válidas.

Para obtener más información sobre cualquiera de los tipos y métodos analizados en esta guía, consulte la siguiente documentación de API:

Volver

Kerberos (GSSAPI)

En esta página