Docs Menu
Docs Home
/ /

Habilitar TLS/SSL en una Conexión

En esta guía, podrá aprender a utilizar el Protocolo de seguridadTLS al conectarse a MongoDB mediante el controlador Kotlin Sync.

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

  • Uso del método enabled() de la clase SslSettings.Builder al crear una instancia MongoClientSettings

Nota

El protocolo de lista de semillas DNS habilita TLS

Si se conecta utilizando el protocolo de lista de semillas DNS, indicado por el prefijo mongodb+srv en su cadena de conexión, el controlador habilita TLS automáticamente.

Para obtener más información sobre el comportamiento de la conexión cuando utiliza una lista de semillas DNS, consulte la sección Formato de conexión SRV de la guía Cadenas de conexión en el manual del servidor.

Para habilitar TLS en una conexión mediante una cadena de conexión, configure la opción tls en true en el parámetro de opciones y pase la cadena a MongoClient.create(), como se muestra en el siguiente código:

val mongoClient = MongoClient.create("mongodb+srv://<db_username>:<db_password>@<cluster_url>/?tls=true")

Para habilitar TLS en una instancia MongoClientSettings, utilice el método de compilación applyToSslSettings(). Establezca la propiedad enabled en true en el bloque SslSettings.Builder, como se muestra en el siguiente código:

val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<connection string URI>"))
.applyToSslSettings { builder ->
builder.enabled(true)
}
.build()
val mongoClient = MongoClient.create(settings)

Nota

Depuración de TLS

Si tiene problemas al configurar su conexión TLS, puede usar la -Djavax.net.debug=all propiedad del sistema para consultar las instrucciones de registro. Consulte "Depuración de conexiones SSL/TLS" en la documentación del lenguaje Java para obtener más información.

Las aplicaciones Kotlin que inician solicitudes TLS requieren acceso a certificados criptográficos que prueban la identidad de la aplicación y verifican otras aplicaciones con las que interactúa. Puede configurar el acceso a estos certificados en su aplicación de las siguientes maneras:

  • Uso de un almacén de confianza de JVM y un almacén de claves de JVM

  • Uso de un almacén de confianza específico para el cliente y un almacén de claves

Nota

Por defecto, el JRE incluye muchos certificados públicos de uso común de autoridades de firma como Let's Encrypt. Como resultado, puedes habilitar TLS cuando te conectas a una instancia de MongoDB Atlas, o a cualquier otro servidor cuyo certificado esté firmado por una autoridad en el almacén de certificados por defecto del JRE, con TLS habilitado sin necesidad de configurar el almacén de confianza.

El almacén de confianza de la JVM guarda certificados que identifican de forma segura otras aplicaciones con las que interactúa su aplicación Kotlin. Al usar estos certificados, su aplicación puede demostrar que la conexión con otra aplicación es genuina y segura contra manipulaciones externas.

Si su instancia de MongoDB utiliza un certificado firmado por una autoridad que no está presente en el almacén de certificados predeterminado de JRE, su aplicación debe configurar las siguientes propiedades del sistema para iniciar solicitudes TLS.

  • javax.net.ssl.trustStore: Ruta a un almacén de confianza que contiene los certificados TLS del cliente

  • javax.net.ssl.trustStorePassword: Contraseña para acceder al almacén de confianza definido en javax.net.ssl.trustStore

Estas propiedades garantizan que su aplicación pueda validar el certificado TLS presentado por una instancia de MongoDB conectada.

Puede crear un almacén de confianza utilizando la herramienta de línea de comandos keytool del JDK como se muestra en el siguiente comando de terminal:

keytool -importcert -trustcacerts -file <path to certificate authority file>
-keystore <path to trust store> -storepass <password>

Nota

De forma predeterminada, las instancias de MongoDB no validan los certificados de cliente. Debe configurar el almacén de claves si configuró su instancia de MongoDB para validar certificados de cliente.

Una aplicación que inicia solicitudes TLS debe configurar las siguientes propiedades del sistema JVM para garantizar que el cliente presente un certificado TLS al servidor MongoDB:

  • javax.net.ssl.keyStore: Ruta a un almacén de claves que contiene los certificados TLS/SSL del cliente

  • javax.net.ssl.keyStorePassword: Contraseña para acceder al almacén de claves definido en javax.net.ssl.keyStore

Puede crear un almacén de claves utilizando la herramienta de línea de comandos keytool o openssl.

Para obtener más información sobre cómo configurar una aplicación Kotlin para usar TLS, consulte la Guía de referencia JSSE en la documentación del lenguaje Java.

Puede configurar un almacén de confianza y un almacén de claves específicos del cliente mediante el método init() de la clase SSLContext.

Encuentre un ejemplo que muestra cómo configurar un cliente para usar una SSLContext instancia en la sección Personalizar la configuración de TLS a través de Java SE SSLContext de esta guía.

De forma predeterminada, el controlador garantiza que el nombre de host incluido en los certificados TLS del servidor coincida con los nombres de host proporcionados al construir un MongoClient. Para deshabilitar la verificación del nombre de host en su aplicación, configure la propiedad invalidHostNameAllowed del constructor como true en el bloque applytoSslSettings():

val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<connection string URI>"))
.applyToSslSettings { builder ->
builder.enabled(true)
builder.invalidHostNameAllowed(true)
}
.build()
val mongoClient = MongoClient.create(settings);

Advertencia

Deshabilitar la verificación del nombre de host 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 restringir su aplicación a utilizar únicamente el protocolo TLS 1.2, configure la propiedad del sistema jdk.tls.client.protocols en "TLSv1.2".

Nota

Los entornos de ejecución de Java (JRE) anteriores 8 a Java solo habilitaban el 1.2 protocolo TLS en versiones de actualización. Si su JRE no lo tiene 1.2 habilitado, actualice a una versión posterior para conectarse mediante TLS.1.2

Si su configuración de TLS requiere personalización, puede establecer la sslContext propiedad de su MongoClient pasando un objeto SSLContext al context() generador de métodos en el applyToSslSettings() bloque:

val sslContext = SSLContext.getDefault()
val settings = MongoClientSettings.builder()
.applyToSslSettings { builder ->
builder.enabled(true)
builder.context(sslContext)
}
.build()
val mongoClient = MongoClient.create(settings);

Para obtener más información sobre la SSLContext clase, consulte la documentación de la API para el contexto SSL.

OCSP es un estándar utilizado para comprobar si los certificados X.509 han sido revocados. Una autoridad de certificación puede añadir un certificado X.509 a la Lista de Revocación de Certificados (CRL) antes de su fecha de caducidad para invalidarlo. Cuando un cliente envía un certificado X.509 durante el protocolo de enlace TLS, el servidor de revocación de la CA comprueba la CRL y devuelve un estado de good, revoked o unknown.

El controlador admite las siguientes variaciones de OCSP:

  • OCSP impulsado por el cliente

  • Grapado OCSP

Las siguientes secciones describen las diferencias entre ellos y cómo habilitarlos para su aplicación.

Nota

El controlador de sincronización de Kotlin utiliza los argumentos JVM configurados para la aplicación y no se puede anular para una instancia MongoClient específica.

En OCSP basado en el cliente, el cliente envía el certificado en una solicitud OCSP a un respondedor OCSP tras recibirlo del servidor. El respondedor OCSP comprueba el estado del certificado con una autoridad de certificación (CA) e informa de su validez en una respuesta enviada al cliente.

Para habilitar OCSP controlado por el cliente para su aplicación, configure las siguientes propiedades del sistema JVM:

Propiedad
Valor

com.sun.net.ssl.checkRevocation

Establezca esta propiedad en true para habilitar la verificación de revocación.

ocsp.enable

Establezca esta propiedad en true para habilitar OCSP controlado por el cliente.

Advertencia

Si el respondedor OCSP no está disponible, la compatibilidad con TLS del JDK informa un fallo grave. Esto difiere del comportamiento de fallo leve de MongoDB Shell y otros controladores.

El grapado OCSP es un mecanismo en el cual el servidor debe obtener el certificado firmado de la autoridad de certificación (CA) e incluirlo en una respuesta OCSP con marca de tiempo al cliente.

Para habilitar el grapado OCSP para su aplicación, configure las siguientes propiedades del sistema JVM:

Propiedad
Descripción

com.sun.net.ssl.checkRevocation

Establezca esta propiedad en true para habilitar la verificación de revocación.

jdk.tls.client.enableStatusRequestExtension

Set this property to true to enable OCSP stapling.

If unset or set to false, the connection can proceed regardless of the presence or status of the certificate revocation response.

Para obtener más información sobre OCSP, consulte los siguientes recursos:

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

Volver

Flujos de cambio