Overview
En esta guía, puedes aprender cómo utilizar el TLS protocolo de seguridad al conectarse a MongoDB usando el controlador Kotlin Sync.
Habilitar TLS
Puedes habilitar TLS en una conexión a tu instancia de MongoDB de las siguientes maneras:
Configurando el
tlsparámetro en tu cadena de conexiónUsar el método
enabled()de la claseSslSettings.Builderal crear una instancia deMongoClientSettings
Nota
El protocolo DNS lista de nodos iniciales habilita TLS
Si se conecta utilizando el protocolo de lista de nodos iniciales de DNS, indicado por el prefijo mongodb+srv en su cadena de conexión, el controlador habilita automáticamente TLS.
Para aprender más sobre el comportamiento de conexión cuando se usa una lista de nodos iniciales de DNS, consulta 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 a true en el parámetro de opciones y pase la string 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 de MongoClientSettings, utiliza el método builder applyToSslSettings(). Establece 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 TLS
Si tiene problemas para configurar su conexión TLS, puede utilizar la propiedad del sistema -Djavax.net.debug=all para ver instrucciones de registro útiles. Consulta Depuración de conexiones SSL/TLS en la documentación del lenguaje Java para más información.
Configurar certificados
Las aplicaciones Kotlin que inician solicitudes TLS requieren acceso a certificados criptográficos que prueben la identidad de la aplicación y verifiquen a otras aplicaciones con las que la aplicación Kotlin interactúa. Se puede configurar el acceso a estos certificados en la aplicación de las siguientes maneras:
Uso de un almacén de confianza JVM y un almacén de claves JVM
Uso de un almacén de confianza específico para el cliente y un almacén de claves
Configura el almacén de confianza de la JVM
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 manera segura otras aplicaciones con las que tu aplicación Kotlin interactúa. Al utilizar estos certificados, la aplicación puede demostrar que la conexión a otra aplicación es auténtica y está protegida contra manipulaciones por parte de terceros.
Si tu instancia de MongoDB utiliza un certificado firmado por una autoridad que no está presente en el almacenes de certificados por defecto del JRE, tu 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 contenga los certificados TLS del clientejavax.net.ssl.trustStorePasswordContraseña para acceder al almacén de confianza definido enjavax.net.ssl.trustStore
Estas propiedades aseguran que tu aplicación pueda validar el certificado TLS presentado por una instancia conectada de MongoDB.
Puede crear un almacén de confianza utilizando la herramienta de línea de comandos keytool de 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>
Configura el almacén de claves JVM
Nota
Por defecto, las instancias de MongoDB no realizan la validación del certificado de cliente. Debe configurar el almacén de claves si configuró su instancia de MongoDB para validar los certificados de cliente.
Una aplicación que inicie 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.keyStoreRuta a un almacén de llaves que contiene los certificados TLS/SSL del clientejavax.net.ssl.keyStorePasswordContraseña para acceder al almacén de claves definido enjavax.net.ssl.keyStore
Puede crear un almacén de claves utilizando la keytool o la herramienta de línea de comandos de openssl.
Para obtener más información sobre cómo configurar una aplicación Kotlin para usar TLS, consulta la Guía de referencia de JSSE en la documentación del lenguaje Java.
Configura un almacén de confianza y un almacén de claves específico para el cliente
Puede configurar un almacén de confianza y un almacén de claves específicos del cliente utilizando el método init() de la clase SSLContext.
Encuentra un ejemplo que muestre cómo configurar un cliente para usar una instancia de SSLContext en la sección Personalizar la configuración de TLS a través de Java SE SSLContext de esta guía.
Desactivar la verificación del nombre de host
Por defecto, 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 desactivar la verificación de nombres de host para tu aplicación, configura la propiedad invalidHostNameAllowed del generador en true en el bloque de construcción 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
Desactivar la verificación del nombre del host hace que tu aplicación sea insegura y potencialmente vulnerable a certificados caducados y procesos foráneos que se hacen pasar por instancias válidas del cliente.
Restringir las conexiones a TLS 1.2 Solamente
Para restringir tu aplicación a usar solo el protocolo TLS 1.2, configura la propiedad del sistema jdk.tls.client.protocols a "TLSv1.2".
Nota
Las Entornos de Ejecución de Java (JRE) previos a Java 8 solo activaban el protocolo TLS 1.2 en las versiones de actualizar. Si tu JRE no ha activado el protocolo TLS 1.2, actualiza a una versión más reciente para conectarte utilizando TLS 1.2.
Personalizar la configuración TLS a través del Java SE SSLContext
Si tu configuración de TLS requiere personalización, puedes configurar la propiedad sslContext de tu MongoClient pasando un objeto SSLContext al generador de métodos context() en el bloque applyToSslSettings():
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 clase SSLContext, consulta la documentación de la API para Contexto SSL.
Online Certificate Status protocolo (OCSP)
OCSP es un estándar utilizado para comprobar si los certificados X.509 han sido revocados. Una autoridad de certificación puede agregar un certificado X.509 a la Lista de revocación de certificados (CRL) antes del tiempo de expiración para invalidar el certificado. Cuando un cliente envía un certificado X.509 durante el handshake TLS, el servidor de revocación de la CA consulta la CRL y devuelve un estado de good, revoked o unknown.
El controlador admite las siguientes variaciones de OCSP:
OCSP impulsado por el cliente
OCSP incorporar
Las siguientes secciones describen las diferencias entre ellas y cómo habilitarlas para su aplicación.
Nota
El controlador Sync de Kotlin utiliza los argumentos de JVM configurados para la aplicación y no se pueden sobrescribir para una instancia específica de MongoClient.
OCSP impulsado por el cliente
En el OCSP impulsado por el cliente, el cliente envía el certificado en una solicitud OCSP a un respondedor OCSP después de recibir el certificado del servidor. El respondedOR OCSP verifica el estado del certificado con una autoridad certificadora (CA) y reporta si es válido en una respuesta enviada al cliente.
Para habilitar OCSP controlado por el cliente para tu aplicación, establece las siguientes propiedades del sistema JVM:
Propiedad | Valor |
|---|---|
| Establezca esta propiedad en |
| Configura esta propiedad en |
Advertencia
Si el respondedor OSCP no está disponible, el soporte TLS proporcionado por el JDK informa un "fallo grave". Esto difiere del comportamiento de "error suave" del MongoDB Shell y de algunos otros drivers.
OCSP incorporar
El OCSP stapling es un mecanismo en el que el servidor debe obtener el certificado firmado de la autoridad certificadora (CA) e incluirlo en una respuesta OCSP marcada por hora para el cliente.
Para activar el OCSP incorporar para su aplicación, establezca las siguientes propiedades del sistema JVM:
Propiedad | Descripción |
|---|---|
| Establezca esta propiedad en |
| 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, consulta los siguientes recursos:
Oracle JDK 8 Documentación en cómo habilitar OCSP para una aplicación
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consulta la siguiente documentación de la API: