Logo
You
Code

MySql v8 con SSL y conexion con PDO en Debian 11

Autor YouCode - http://www.youcode.com.ar/mysql/mysql-v8-con-ssl-y-conexion-con-pdo-en-debian-11-520

Configurar MySql para que haga uso de SSL y configaremos la conexion PDO

Se asume que MySql ya esta instalado, para este artículo estamos usando MySql V8 .

Ingresamos a la consola de mysql y verificamos el status de ssl.
 
mysql> SHOW VARIABLES LIKE '%ssl%';
















































Como vemos en la imagen, have_openssl y have_ssl estan activos, vamos a proceder a crear los certificados, para ello, salimos de la consola de mysql.

Hacemos:
mysql_ssl_rsa_setup --uid=mysql
los archivos que se generan los pueden ver en:
ls -l /var/lib/mysql/*.pem

-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 10 07:45 /var/lib/mysql/ca.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 10 07:45 /var/lib/mysql/client-cert.pem
-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/client-key.pem
-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/private_key.pem
-rw-r--r-- 1 mysql mysql  452 Jul 10 07:45 /var/lib/mysql/public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 10 07:45 /var/lib/mysql/server-cert.pem
-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/server-key.pem
reiniciamos mysql:
systemctl restart mysql
editamos el archivo de configuracion:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
agregamos
[mysqld]
require_secure_transport = ON
bind-address = 0.0.0.0
si bind-address lo tienen comentado o con algun ip, lo pueden dejar, volvemos a reiniciar mysql
systemctl restart mysql
de parte del servidor, es todo.

Para las conexiones PDO solo nos queda agregar lo siguiente:
Por ej:
$db = new PDO(
                "mysql:host=127.0.0.1;port=3306};dbname=mi_base",'USUARIO','CLAVE',
                array(
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ,
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'",
		    PDO::MYSQL_ATTR_SSL_KEY =>__DIR__.'/client-key.pem',
                    PDO::MYSQL_ATTR_SSL_CERT=>__DIR__.'/client-cert.pem',
                    PDO::MYSQL_ATTR_SSL_CA=>__DIR__.'/ca.pem',
		    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT=>false
                )
            );
deben colocar en la carpeta de su sitio los certificados como se ven en el codigo, puede ser la carpeta que ustedes quierean pero editen los datos que puse.

Atencion, el MYSQL_ATTR_SSL_VERIFY_SERVER_CERT=>false es porque si esta en TRUE hace que el certificado sea validado por el hostname del server y es posible que les de error, con dejarlo en false lo que no se valida es el hostname.

Con esto, ya estarian trabajndo con ssl.
 
http://www.youcode.com.ar/mysql/mysql-v8-con-ssl-y-conexion-con-pdo-en-debian-11-520