Overview
En esta guía, puedes aprender a usar el protocolo TLS para asegurar tu conexión a una implementación de MongoDB. Para configurar tu conexión para usar TLS, activa la opción TLS y proporciona tus certificados para la validación al crear un cliente.
Esta guía incluye las siguientes secciones:
Habilitar TLS describe formas de habilitar TLS en tu conexión
Configurar Certificados describe los certificados necesarios para configurar TLS
Certificados de referencia en un cliente proporciona un ejemplo de cómo crear un
Configestructura para configurar tus opciones TLSInformación adicional proporciona enlaces a recursos y documentación de la API para los tipos y métodos mencionados en esta guía
Tip
Para aprender más información sobre TLS, consulta la entrada de Wikipedia sobre Seguridad de la capa de transporte.
Habilitar TLS
Puedes habilitar TLS en una conexión a tu instancia de MongoDB de una de las siguientes maneras:
Establecer la opción
tlsentrueen tu cadena de conexiónPasando una estructura
Configvacía al métodoSetTLSConfig()al crear una instanciaClientOptions
Seleccione de lo siguiente Connection String y ClientOptions pestañas para ver una muestra de código correspondiente:
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, consulta Opciones de conexión.
Configurar certificados
Para iniciar con éxito una solicitud TLS, tu aplicación debe presentar certificados criptográficos para demostrar 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 tu implementación de MongoDB utilice certificados válidos generados y firmados por la misma autoridad certificadora. Para las pruebas, tu implementación puede usar certificados autofirmados.
La siguiente lista describe los componentes que tu cliente debe presentar para establecer una conexión habilitada para TLS:
Componente TLS | Descripción |
|---|---|
Autoridad certificadora (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 del 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. |
Certificados de referencia en un cliente
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 de Config, importa los paquetes crypto/tls y crypto/x509. A continuación, crea una instancia struct de Config y configura los campos relevantes del struct para tu configuración.
Dentro de tu instancia Config, puedes configurar campos opcionales para configurar TLS en tu conexión. Para fines de prueba, puedes establecer el campo InsecureSkipVerify en true.
Advertencia
Configurar el campo InsecureSkipVerify en true desactiva tanto la validación del certificado como la del nombre de host.
Especificar esta opción en un entorno de producción hace que tu aplicación sea insegura y potencialmente vulnerable a certificados vencidos y procesos externos que se hacen pasar por instancias válidas de clientes.
Para obtener más información sobre la estructura Config, consulte la documentación de la API de tls.Config.
Ejemplo
Este ejemplo realiza las siguientes acciones para crear una instancia de Config y una instancia de Client con TLS habilitado:
Crea variables para hacer referencia a las rutas de los archivos de certificados
Crea un grupo de archivos CA utilizando el método
x509.NewCertPool()y agrega el contenido del archivo CACarga los archivos de certificados de cliente usando el método
tls.LoadX509KeyPair()Instancia una estructura
Configy establece los camposRootCAsyCertificates.Pasa la instancia
Configal métodoSetTLSConfig()para establecer el campoTLSConfigdelClientOptions
// 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) } }() }
Información Adicional
Para obtener más información sobre cómo habilitar TLS en una conexión, consulta la siguiente documentación del manual del servidor:
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API: