Docs Menu
Docs Home
/ /

Habilitar y configurar TLS

En esta guía, aprenderá a usar el protocolo TLS para proteger su conexión a una implementación de MongoDB. Para configurar su conexión con TLS, habilite la opción TLS y proporcione sus certificados para su validación al crear un cliente.

Esta guía incluye las siguientes secciones:

  • Habilitar TLS describe formas de habilitar TLS en su conexión

  • Configurar Certificados describe los certificados necesarios para configurar TLS

  • Los certificados de referencia en un cliente proporcionan un ejemplo de cómo crear un Config Estructura para configurar sus opciones TLS

  • Información adicional proporciona enlaces a recursos y documentación de API para los tipos y métodos mencionados en esta guía.

Tip

Para obtener más información sobre TLS, consulte la entrada de Wikipedia sobre seguridad de la capa de transporte.

Puedes habilitar TLS en una conexión a tu instancia de MongoDB de una de las siguientes maneras:

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

  • Pasando una estructura Config vacía al método SetTLSConfig() al crear una instancia ClientOptions

Seleccione entre las siguientes opciones Connection String y ClientOptions pestañas para ver un ejemplo de código correspondiente:

uri := "mongodb://<hostname>:<port>?tls=true"
opts := options.Client().ApplyURI(uri)
client, _ := mongo.Connect(context.TODO(), opts)
uri := "<connection string>"
opts := options.Client().ApplyURI(uri).SetTLSConfig(&tls.Config{})
client, _ := mongo.Connect(context.TODO(), opts)

Nota

Si su cadena de conexión utiliza un registro DNS SRV al incluir el prefijo mongodb+srv, TLS está habilitado en su conexión de forma predeterminada.

Para obtener una lista completa de las opciones del cliente, consulte Opciones de conexión.

Para iniciar correctamente una solicitud TLS, su aplicación debe presentar certificados criptográficos que acrediten su identidad. Los certificados de su aplicación deben almacenarse como archivos PEM para habilitar TLS al conectarse.

Importante

Para uso en producción, recomendamos que su implementación de MongoDB utilice certificados válidos generados y firmados por la misma autoridad de certificación. Para pruebas, su implementación puede usar certificados autofirmados.

La siguiente lista describe los componentes que su cliente debe presentar para establecer una conexión habilitada para TLS:

Componente TLS
Descripción

Autoridad de certificación (CA)

Una o más autoridades de certificación en las que confiar al realizar una conexión TLS.

Certificado de cliente

Un certificado digital que permite al servidor verificar la identidad de su aplicación para establecer una conexión de red cifrada.

Clave de certificado

El archivo de clave privada del certificado de cliente. Esta clave a menudo se incluye dentro del propio archivo de certificado.

Frase de contraseña

La contraseña para descifrar la clave privada del cliente si está cifrada.

Debe hacer referencia a sus certificados en su objeto ClientOptions para que el servidor pueda validarlos antes de que el cliente se conecte. Recomendamos que configure el campo TLSConfig de su instancia ClientOptions en un Config struct para configurar su conexión TLS. Los structs Config son nativos de Go y le permiten mantener todas sus opciones TLS en un único objeto reutilizable.

Para crear una instancia Config, importe los paquetes crypto/tls y crypto/x509. A continuación, cree una instancia de estructura Config y configure los campos de estructura correspondientes.

En su Config instancia, puede configurar campos opcionales para TLS en su conexión. Para realizar pruebas, puede configurar el InsecureSkipVerify campo true como.

Advertencia

Establecer el campo InsecureSkipVerify en true deshabilita la validación del certificado y del nombre de host.

Especificar esta opción 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 la Config estructura, consulte la documentación de la API tls.Config.

Este ejemplo realiza las siguientes acciones para crear una instancia Config y una instancia Client con TLS habilitado:

  1. Crea variables para hacer referencia a las rutas de los archivos del certificado

  2. Crea un grupo de archivos CA utilizando el método x509.NewCertPool() y agrega el contenido del archivo CA

  3. Carga los archivos de certificado de cliente utilizando el método tls.LoadX509KeyPair()

  4. Crea una instancia de una estructura Config y establece los campos RootCAs y Certificates

  5. Pasa la instancia Config al método SetTLSConfig() para establecer el campo TLSConfig del ClientOptions

// Enable TLS on a connection by using the Go driver
package main
import (
"context"
"crypto/tls"
"crypto/x509"
"os"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
caFile := "<path to CA certificate>"
certFile := "<path to public client certificate>"
keyFile := "<path to private client key>"
// Loads CA certificate file
caCert, err := os.ReadFile(caFile)
if err != nil {
panic(err)
}
caCertPool := x509.NewCertPool()
if ok := caCertPool.AppendCertsFromPEM(caCert); !ok {
panic("Error: CA file must be in PEM format")
}
// Loads client certificate files
cert, err := tls.LoadX509KeyPair(certFile, keyFile)
if err != nil {
panic(err)
}
// Instantiates a Config instance
tlsConfig := &tls.Config{
RootCAs: caCertPool,
Certificates: []tls.Certificate{cert},
}
uri := "<connection string>"
// Sets TLS options in options instance
opts := options.Client().ApplyURI(uri).SetTLSConfig(tlsConfig)
// Connects to MongoDB with TLS enabled
client, err := mongo.Connect(context.TODO(), opts)
if err != nil {
panic(err)
}
defer func() {
if err = client.Disconnect(context.TODO()); err != nil {
panic(err)
}
}()
}

Para obtener más información sobre cómo habilitar TLS en una conexión, consulte la siguiente documentación del manual del servidor:

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

Volver

Compresión de la red

En esta página