Seguridad en Bases de Datos: Implementando SSL/TLS en MySQL

Servicios de Seguridad con TLS/SSL

El protocolo o capa de seguridad TLS/SSL permite implementar los servicios de confidencialidad, integridad y autenticación de datos entre un cliente y el Sistema Gestor de la Base de Datos (SGBD).

  • Confidencialidad: Se implementa mediante la distribución segura de una clave de sesión entre las partes.
  • Integridad y Autenticación: Se implementan mediante la distribución segura de una clave de autenticación y el uso de funciones hash.

Esta distribución de claves se realiza utilizando la clave pública del SGBD. Adicionalmente, la capa TLS/SSL puede implementar opcionalmente el servicio de no repudio, obligando en este caso a utilizar el mecanismo de firma digital con un certificado y clave privada del cliente.

Servicio de Seguridad: Garantía de Identidad del Usuario

El Servicio de No Repudio garantiza de forma inequívoca que un cliente es quien dice ser. El mecanismo que lo implementa es la firma digital, es decir, el cifrado con la clave privada del cliente de los mensajes intercambiados con el SGBD.

Creación de Usuarios con SSL/TLS en MySQL

Se presentan ejemplos de cómo crear usuarios en MySQL con diferentes niveles de seguridad SSL/TLS:

  • GRANT ALL PRIVILEGES ON *.* TO 'Cliente_1'@'%' IDENTIFIED BY 'ssl' WITH GRANT OPTION; (Crea el usuario ‘Cliente_1’ con clave ‘ssl’)
  • GRANT ALL PRIVILEGES ON *.* TO 'Cliente_1'@'%' IDENTIFIED BY 'ssl' REQUIRE SSL; (Al usuario ‘Cliente_1’ con clave ‘ssl’ se le exige utilizar SSL)
  • GRANT ALL PRIVILEGES ON *.* TO 'Cliente_1'@'%' IDENTIFIED BY 'ssl' REQUIRE X509; (Al usuario ‘Cliente_1’ con clave ‘ssl’ se le exige autenticación a través de un Certificado digital X.509)

Mensajes SSL

  • «Certificate Verify»: Es donde se realiza (opcionalmente) una firma digital con la clave privada del cliente. Se realiza un cifrado con la clave privada de un resumen (hash) de los mensajes SSL intercambiados. Con ello se garantiza la identidad del cliente. La cláusula REQUIRE X509 exige del cliente los mensajes «Certificate» y «Certificate Verify».
  • «Client Key Exchange»: Es donde el cliente envía una clave de sesión y una de autenticación cifradas con la clave pública del servidor (SGBD MySQL). De esta forma, la distribución de las claves se hace de forma confidencial: solo quien tenga la clave privada del servidor puede descifrar el contenido. Por hipótesis, solo puede ser el SGBD MySQL.
  • «Client Key Exchange» (Integridad y Autenticación): Una vez distribuida la clave de autenticación de forma segura, los datos correspondientes a las consultas al SGBD MySQL se agrupan en segmentos de modo que a cada segmento se le añade un bloque criptográfico (función hash) formado por el código de autenticación del segmento, tomando como entrada la clave de autenticación distribuida. Este bloque criptográfico se comprueba en destino y, si se recibe inalterado, confirmaría la autenticación e integridad de los segmentos recibidos. Por consiguiente, los servicios implementados son autenticación e integridad.

Información Relativa al Usuario

  • La contraseña e incluso el login del usuario van protegidos por el protocolo SSL, que garantiza la confidencialidad de la información cifrando los datos con una clave de sesión SSL distribuida entre el cliente y el SGBD.
  • Una vez distribuida la clave de sesión de forma segura, las consultas al SGBD MySQL son cifradas mediante un mecanismo de cifrado simétrico tomando como entrada la clave de sesión distribuida. El mecanismo de cifrado simétrico implementa el servicio de confidencialidad (protección de la información, revelación de contenidos frente a intrusos).
  • La base de datos de gestión de MySQL se llama «mysql» y la tabla en la que se almacena la información relativa al usuario (dirección IP de acceso, login y contraseña) es la tabla «user».
  • La contraseña de los usuarios no se almacena nunca en claro en el SGBD, solo se almacena un resumen (hash) de la contraseña en la tabla mysql.user. El cliente presenta una contraseña cuyo hash coincida con el almacenado por el SGBD.
  • Login Request -> (IP) Source: usuario y Destination: SGBD

Certificados

Cliente:

  • CL_Certificado.pem: Un certificado de clave pública.
  • CL_ClavePrivada.pem: Una clave privada asociada.
  • CACertificado.pem: El certificado de la Autoridad de Certificación que se va a utilizar para comprobar la firma del certificado del servidor enviado en el mensaje «Certificado» del protocolo SSL.

Servidor:

  • SR_certificado.pem: Contiene el certificado del SGBD MySQL que, a su vez, contiene la clave pública que el cliente utilizará más adelante para distribuir claves de sesión y autenticación. Se envía en el mensaje «Certificado» del servidor.
  • SR_ClavePrivada.pem: Contiene la clave privada del SGBD MySQL que se utilizará para descifrar las claves de sesión y autenticación que enviará el cliente al SGBD MySQL en el mensaje «Intercambio de clave de Cliente».
  • CA_Certificado.pem: Contiene la Autoridad de Certificación que se utilizará para validar el certificado enviado por el cliente (mensaje «Certificado»), es decir, se utilizará para comprobar que está firmado por esta autoridad.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.