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