Cómo configurar conexiones SSL de MySQL

Cómo configurar conexiones SSL de MySQL

Válido para las versiones 88 hasta la última versión


Última modificación: 27 de agosto de 2021

Visión general

Este documento describe cómo configurar su servidor para usar SSL para conexiones de base de datos MySQL®. Después de proteger sus conexiones MySQL, los usuarios malintencionados no pueden interceptar su tráfico MySQL.

Importante:

usted debe poseer root acceso al cliente y a los servidores host para completar este tutorial.

Configurar conexiones SSL de MySQL

Cree el directorio para almacenar las claves SSL

Para crear el directorio que contendrá las claves SSL, realice los siguientes pasos:

  1. Inicie sesión en su servidor a través de SSH. Para obtener más información, lea nuestro Acceso SSH documentación.

  2. Cree un directorio de almacenamiento de claves SSL al que pueda acceder MySQL. Por ejemplo, ejecute el mkdir /mysql_keys comando para crear un mysql_keys directorio.

Crea las claves SSL

Nota:

  • En los siguientes ejemplos, /mysql_keys representa el directorio de almacenamiento de claves.

  • El nombre común de los certificados y claves para el cliente y el servidor debe ser diferente del nombre común del certificado de CA. Los nombres comunes idénticos fallarán con un error similar a:
    ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

Para crear las claves SSL, realice los siguientes pasos:

  1. Ejecute los siguientes comandos para crear las claves de la autoridad de certificación (CA):

    1
    2
    
    openssl genrsa 2048 > /mysql_keys/ca-key.pem
    openssl req -sha1 -new -x509 -nodes -days 3650 -key /mysql_keys/ca-key.pem > /mysql_keys/ca-cert.pem
  2. Ejecute los siguientes comandos para crear el certificado y la clave SSL del servidor:

    1
    2
    3
    
    openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /mysql_keys/server-key.pem > /mysql_keys/server-req.pem
    openssl x509 -sha1 -req -in /mysql_keys/server-req.pem -days 3650 -CA /mysql_keys/ca-cert.pem -CAkey /mysql_keys/ca-key.pem -set_serial 01 > /mysql_keys/server-cert.pem
    openssl rsa -in /mysql_keys/server-key.pem -out /mysql_keys/server-key.pem
  3. Ejecute los siguientes comandos para crear el certificado y la clave SSL del cliente:

    1
    2
    3
    
    openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /mysql_keys/client-key.pem > /mysql_keys/client-req.pem
    openssl x509 -sha1 -req -in /mysql_keys/client-req.pem -days 3650 -CA /mysql_keys/ca-cert.pem -CAkey /mysql_keys/ca-key.pem -set_serial 01 > /mysql_keys/client-cert.pem
    openssl rsa -in /mysql_keys/client-key.pem -out /mysql_keys/client-key.pem

Edita la configuración de MySQL

Para editar la configuración de MySQL, realice los siguientes pasos:

  1. Abre el /etc/my.cnf archivo con su editor de texto preferido.

  2. Inserte las siguientes líneas en el [mysqld] sección de la my.cnf expediente:

    1
    2
    3
    4
    5
    
    ssl
    ssl-cipher=DHE-RSA-AES256-SHA
    ssl-ca=/mysql_keys/ca-cert.pem
    ssl-cert=/mysql_keys/server-cert.pem
    ssl-key=/mysql_keys/server-key.pem
  3. Inserte las siguientes líneas en el [client] sección de la my.cnf expediente:

    Nota:

    Si el [client] la sección no existe, tu debe Agrega un [client] sección.

    1
    2
    3
    4
    
    [client]
        ssl-mode=REQUIRED
        ssl-cert=/mysql_keys/client-cert.pem
        ssl-key=/mysql_keys/client-key.pem

    Tu actualizado my.cnf El archivo debe parecerse al siguiente ejemplo:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    [mysqld]
        max_connections=500
        log-slow-queries
    
        max_allowed_packet=268435456
        open_files_limit=10000
        default-storage-engine=MyISAM
        innodb_file_per_table=1
        performance-schema=0
    
        ssl
        ssl-cipher=DHE-RSA-AES256-SHA
        ssl-ca=/mysql_keys/ca-cert.pem
        ssl-cert=/mysql_keys/server-cert.pem
        ssl-key=/mysql_keys/server-key.pem
    
    [client]
        ssl-mode=REQUIRED
        ssl-cert=/mysql_keys/client-cert.pem
        ssl-key=/mysql_keys/client-key.pem
        

    Nota:

    • los ssl-mode=REQUIRED La configuración creará una conexión cifrada si el servidor admite conexiones cifradas. Si el servidor no puede crear una conexión cifrada, la conexión fallará. Para obtener más información sobre opciones adicionales para ssl-mode configuración, leer MySQL modo ssl documentación.

    • MySQL introdujo el ssl-mode configuración en MySQL 5.7. Si ejecuta MySQL 5.6 o anterior, reemplace ssl-mode=REQUIRED con ssl.

  4. Guarde sus cambios en el /etc/my.cnf archivo y salga de su editor de texto.

  5. Ejecute el siguiente comando para actualizar los permisos de archivo del /mysql_keys directorio y sus archivos:

    chown -Rf mysql. /mysql_keys
  6. Ejecutar el /scripts/restartsrv_mysql script para reiniciar MySQL.

Prueba la configuración de SSL

Para probar la configuración de SSL, realice los siguientes pasos:

  1. Para ver la configuración SSL activa de MySQL, ejecute el siguiente comando:

    mysql -e "show variables like '%ssl%';"

    La salida se parecerá al siguiente ejemplo:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    +---------------+------------------------+
        | Variable_name | Value                  |
        +---------------+------------------------+
        | have_openssl  | YES                    |
        | have_ssl      | YES                    |
        | ssl_ca        | /mysql_keys/ca-cert.pem |
        | ssl_capath    |                        |
        | ssl_cert      | /mysql_keys/server-cert.pem |
        | ssl_cipher    | DHE-RSA-AES256-SHA     |
        | ssl_key       | /mysql_keys/server-key.pem  |
        +---------------+------------------------+
  2. Para verificar una conexión local a MySQL, ejecute el siguiente comando, donde ejemplo representa el nombre de usuario de la cuenta de cPanel:

  3. Cuando el sistema se lo solicite, ingrese la contraseña de la cuenta de usuario de MySQL.

  4. Después de conectarse, ejecute el status mando. La salida se parecerá al siguiente ejemplo:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    mysql> status
        --------------
        mysql  Ver 14.14 Distrib 5.5.42, for Linux (x86_64) using readline 5.1
    
        Connection id:        19
        Current database:  
        Current user:        example@localhost
        SSL:            Cipher in use is DHE-RSA-AES256-SHA
        Current pager:        stdout
        Using outfile:        ''
        Using delimiter:    ;
        Server version:        5.5.42-cll MySQL Community Server (GPL)
        Protocol version:    10
        Connection:        Localhost via UNIX socket
        Server characterset:    latin1
        Db     characterset:    latin1
        Client characterset:    utf8
        Conn.  characterset:    utf8
        UNIX socket:        /var/lib/mysql/mysql.sock
        Uptime:            4 min 36 sec
        Threads: 1  Questions: 67  Slow queries: 0  Opens: 34  Flush tables: 1  Open tables: 27  Queries per second avg: 0.242
        --------------

Crea un usuario y permite el acceso remoto

Nota:

Este paso es Opcional.

Para crear un usuario y permitir el acceso remoto, realice los siguientes pasos:

  1. Navega a cPanel’s Bases de datos MySQL interfaz (cPanel >> Inicio >> Bases de datos >> Bases de datos MySQL) y cree su usuario de base de datos.

  2. Agregue la dirección IP del servidor remoto a WHM MySQL remoto interfaz (cPanel >> Inicio >> Bases de datos >> Remoto MySQL).

  3. En el servidor MySQL remoto, cree un directorio de almacenamiento de claves SSL al que pueda acceder MySQL. Por ejemplo, use el mkdir /mysql_keys comando para crear un mysql_keys directorio.

    Nota:

    Puede omitir este paso si ya ha creado el /mysql_keys directorio en el servidor MySQL remoto.

  4. Copie el certificado SSL del cliente en el servidor MySQL remoto. /mysql directorio.

  5. En el servidor MySQL remoto, abra el /etc/my.cnf archivo con su editor de texto preferido.

  6. Inserte las siguientes líneas en el [client] sección de la my.cnf expediente:

    1
    2
    3
    4
    
    [client]
      ssl-mode=REQUIRED
      ssl-cert=/mysql_keys/client-cert.pem
      ssl-key=/mysql_keys/client-key.pem

    Nota:

    Si el [client] la sección no existe, tu debe agregue la sección.

    Tu actualizado /etc/my.cnf El archivo debe parecerse al siguiente ejemplo:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    [mysqld]
        max_connections=500
        log-slow-queries
    
        max_allowed_packet=268435456
        open_files_limit=10000
        default-storage-engine=MyISAM
        innodb_file_per_table=1
        performance-schema=0
    
    
    [client]
        ssl-mode=REQUIRED
        ssl-cert=/mysql_keys/client-cert.pem
        ssl-key=/mysql_keys/client-key.pem

    Nota:

    • los ssl-mode=REQUIRED La configuración creará una conexión cifrada si el servidor admite conexiones cifradas. Si el servidor no puede crear una conexión cifrada, la conexión fallará. Para obtener más información sobre opciones adicionales para ssl-mode configuración, leer MySQL modo ssl documentación.

    • MySQL introdujo el ssl-mode configuración en MySQL 5.7. Si ejecuta MySQL 5.6 o anterior, reemplace ssl-mode=REQUIRED con ssl.

  7. Guarde sus cambios en el /etc/my.cnf archivo y salga de su editor de texto.

  8. Ejecute el siguiente comando para actualizar los permisos para el /mysql_keys directorio y sus archivos:

    chown -Rf mysql. /mysql_keys
  9. Reinicie el servidor MySQL.

Nota:

Si el servidor MySQL remoto ejecuta cPanel & WHM, use el /scripts/restartsrv_mysql script para reiniciar MySQL.

Pruebe la conexión MySQL remota

Para probar la conexión MySQL remota, realice los siguientes pasos:

  1. Inicie sesión en el servidor MySQL remoto a través de SSH. Para obtener más información, lea nuestro Acceso SSH documentación.

  2. Utilizar el mysql comando para conectarse de forma remota al servidor MySQL. El siguiente ejemplo usa la dirección IP 192.168.0.1 para el servidor MySQL de destino y example para el usuario de MySQL:

    mysql -u example -h 192.168.0.1 -p

    los mysql El comando lo conectará al servidor MySQL remoto y solicitará la contraseña de usuario de MySQL.

  3. Después de conectarse al servidor MySQL remoto, ingrese el status mando. La salida se parecerá al siguiente ejemplo:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    mysql> status
    --------------
    mysql  Ver 14.14 Distrib 5.5.42, for Linux (x86_64) using readline 5.1
    
    Connection id:        19
    Current database:  
    Current user:        example@localhost
    SSL:            Cipher in use is DHE-RSA-AES256-SHA
    Current pager:        stdout
    Using outfile:        ''
    Using delimiter:    ;
    Server version:        5.5.42-cll MySQL Community Server (GPL)
    Protocol version:    10
    Connection:        Localhost via UNIX socket
    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:        /var/lib/mysql/mysql.sock
    Uptime:            4 min 36 sec
    Threads: 1  Questions: 67  Slow queries: 0  Opens: 34  Flush tables: 1  Open tables: 27  Queries per second avg: 0.242
    --------------

Deja una respuesta

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