Mysql-SSL

Si hoy no es su día, simplemente no realice esto.

Crear usuario que administre la base de datos

Users_Alias GRUPOBASE=ubase
Cmnd_Alias COMANDOSBASE= /etc/init.d/mysql *
GRUPOBASE ALL=NOPASSWD:COMANDOSBASE, LOGS

La siguiente parte describe como realizar las conexiones seguras usando mysql, para el flujo de los datos encriptado, durante las sesiones.

Creación de certificados

Usando la herramienta openssl puede crear certificados auto-firmados.

los certificados a generar son los siguientes:

  • certificado cliente
  • certificado servidor
  • certificado CA

Si no cuenta con openssl : sudo apt-get install sudo apt-get install openssl

Crea un directorio para guardar los certificados

sudo mkdir -p /home/usuario/certificados

cd /home/usuario/certificados

le pedirá llenar los datos para generar el certificado tanto en el certificado cliente como en el servidor.

Certificado CA

openssl genrsa 2048 > ca-key.pem

asdfa

openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem

Certificado servidor

$ openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem

$ openssl rsa -in server-key.pem -out server-key.pem

$ openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Certificado cliente

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem

openssl rsa -in client-key.pem -out client-key.pem

openssl x509 -req -in client-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Verifica el estado de los certificados creados:

openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem

resultado:

server-cert.pem: OK
client-cert.pem: OK

Es necesario contar con certificados

Lo siguiente es agregar los certificados al archivo de configuración de mysql,

Puede copiar los certificados al directorio de mysql

sudo mkdir -p /etc/mysql-ssl
sudo cp ca-cert.pem /etc/mysql-ssl
....

Inicia sesión en mysql para revisar si ssl se encuentra activo

mysql -u root -p
show global variables like 'have_%ssl'

Agrega los certificados al archivo my.cnf

Y agrega este contenido

ssl-ca=/etc/mysql-ssl/ca-cert.pem
ssl-cert=/etc/mysql-ssl/server-cert.pem
ssl-key=/etc/mysql-ssl/server-key.pem

Al final del archivo agreguen la siguiente linea, para que desde cualquier nodo pueda acceder el usuario

bind-address = *

Reiniciar apache2

sudo /etc/init.d/mysql restart

Iniciar sesión en mysql y revisar el estado

$ mysql -u root -p
mysql> SHOW VARIABLES LIKE 'have_ssl'

Crea un usuario para el uso de sssl

mysql> grant all privileges on *.* to 'sslusuario'@'%' identified by 'contrasenia' require ssl;
mysql> flush privileges;

Configurar SSL desde cliente Mysql

Si el cliente se encuentra en otro nodo

copia sus claves igual al directorio /etc/mysql-ssl

y edita el archivo my.cnf

sudo nano /etc/mysql-ssl/my.cnf

Agrega las claves correspondientes

# [client] SSL
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/etc/mysql-ssl/client-cert.pem
ssl-key=/etc/mysql-ssl/client-key.pem

Prueba de la conexión desde el equipo cliente

$ mysql -h ipservidormysql -u sslusuario -p
mysql >status;

Con status le mostrar los datos del certificado ssl

Probar conexión usando php

Crea un archivo en el directorio de /var/www/html/

sudo nano /var/www/html/pruebassl.php

y agrega este contenido

$conn=mysqli_init();
mysqli_ssl_set($conn, ‘/etc/mysql-ssl/client-key.pem’, ‘/etc/mysql-ssl/client-cert.pem’, NULL, NULL, NULL);
if (!mysqli_real_connect($conn, ‘127.0.0.1’, ‘ssluser’, ‘pass’)) { die(); }
$res = mysqli_query($conn, ‘SHOW STATUS‘);
print_r(mysqli_fetch_row($res));
mysqli_close($conn);

Ingresa desde el navegador

https://ipservidor/pruebassl.php

Mostrara el estado de la conexión ssl

results matching ""

    No results matching ""