W3docs

Guía completa sobre la función mysqli_ssl_set en PHP

Aprende a usar mysqli_ssl_set en PHP para configurar parámetros SSL/TLS y establecer conexiones seguras con MySQL.

Al trabajar con bases de datos MySQL en PHP, la extensión mysqli proporciona una variedad de funciones para realizar operaciones de base de datos. Una de ellas es mysqli_ssl_set, que configura los parámetros SSL/TLS para establecer una conexión segura con un servidor MySQL.

En esta guía, explicaremos cómo funciona mysqli_ssl_set, sus parámetros y cómo implementarla correctamente en tus proyectos PHP.

¿Qué es la función mysqli_ssl_set?

La función mysqli_ssl_set es una función integrada de PHP que configura las opciones SSL/TLS para un objeto de conexión MySQL. Se utiliza para garantizar la transmisión segura de datos entre tu script PHP y el servidor MySQL.

La función acepta seis parámetros. El primer argumento es el objeto de conexión MySQL devuelto por mysqli_init(). Los argumentos restantes especifican las rutas a la clave SSL, el certificado, el certificado CA, la ruta del certificado CA y el conjunto de cifrado.

A continuación se muestra la sintaxis de la función mysqli_ssl_set:

Sintaxis de la función mysqli_ssl_set

mysqli_ssl_set($connection, $key, $cert, $ca, $capath, $cipher);

Parámetros

ParámetroDescripción
$connectionUn objeto de conexión creado con mysqli_init(). Obligatorio.
$keyRuta al archivo de clave privada del cliente (PEM). Pasa null si no se usa.
$certRuta al archivo de certificado de clave pública del cliente (PEM). Pasa null si no se usa.
$caRuta al archivo de autoridad certificadora (CA) usado para verificar el servidor. Pasa null si no se usa.
$capathRuta a un directorio de certificados CA de confianza en formato PEM. Pasa null si no se usa.
$cipherUna lista de cifrados permitidos para usar en SSL/TLS. Pasa null para usar los predeterminados.

Cualquier parámetro que no necesites puede pasarse como null. Una configuración mínima común solo proporciona el archivo CA ($ca) para que el cliente pueda verificar el certificado del servidor, dejando el resto como null.

¿Cuándo la usarías?

Se usa mysqli_ssl_set siempre que la aplicación PHP y el servidor MySQL se comuniquen a través de una red no confiable; por ejemplo, un servidor web que se conecta a una base de datos en la nube administrada, o cualquier conexión que cruce la internet pública. Sin SSL/TLS, las credenciales y los resultados de las consultas viajan en texto plano y pueden ser leídos por cualquiera que pueda observar el tráfico.

Características de la función mysqli_ssl_set

La función mysqli_ssl_set proporciona varias capacidades que la hacen esencial para proteger las comunicaciones de base de datos en PHP. Algunas de las características clave incluyen:

1. Transmisión segura de datos

El propósito principal de mysqli_ssl_set es configurar un canal cifrado SSL/TLS entre tu aplicación PHP y el servidor MySQL. Esto protege los datos sensibles de ser interceptados durante el tránsito.

2. Configuración previa a la conexión

La función te permite establecer parámetros SSL en un objeto de conexión antes de que se establezca la conexión real. Esto garantiza que el servidor aplique el cifrado desde el momento en que comienza el protocolo de enlace.

3. Valor de retorno booleano

La función devuelve un valor booleano que indica éxito o fracaso. No genera advertencias ni errores automáticamente; en su lugar, debes verificar el valor de retorno y usar mysqli_connect_error() o mysqli_error() para obtener información detallada sobre el fallo si es necesario.

Cómo usar la función mysqli_ssl_set

Para usar mysqli_ssl_set correctamente, debes inicializar el objeto de conexión, establecer los parámetros SSL y luego establecer la conexión usando mysqli_real_connect(). El orden importa: mysqli_ssl_set() solo almacena las opciones SSL en el objeto de conexión. Se aplican durante el protocolo de enlace realizado por mysqli_real_connect(), por lo que llamar a mysqli_ssl_set() después de que una conexión ya está abierta no tiene efecto.

1. Inicializar y configurar los parámetros SSL

Primero, crea un objeto de conexión usando mysqli_init(), luego aplica la configuración SSL antes de conectarse:

Ejemplo de la función PHP mysqli_ssl_set

<?php

$connection = mysqli_init();
if (!$connection) {
    die('mysqli_init failed');
}

// Set SSL parameters before connecting
mysqli_ssl_set($connection, '/path/to/ssl/key', '/path/to/ssl/cert', '/path/to/ssl/ca', null, null);

// Establish the connection
if (!mysqli_real_connect($connection, 'localhost', 'username', 'password', 'mydatabase')) {
    die('Connection failed: ' . mysqli_connect_error());
}

echo 'Secure connection established successfully.';
?>

2. Verificar la conexión cifrada

Después de conectarse, puedes verificar que SSL esté activo consultando el estado del servidor con mysqli_query(). Si la conexión está cifrada, Ssl_cipher devuelve el nombre del cifrado negociado; si está vacío, la conexión no usa SSL:

<?php
$result = $connection->query("SHOW STATUS LIKE 'Ssl_cipher'");
$row = $result->fetch_row();

if (!empty($row[1])) {
    echo 'Encrypted connection using cipher: ' . $row[1];
} else {
    echo 'Connection is NOT encrypted.';
}
?>

Errores comunes

  • La verificación del certificado falla. Si mysqli_real_connect() falla con un error de certificado, asegúrate de que el archivo $ca corresponda a la autoridad que firmó el certificado del servidor y que el archivo sea legible por el proceso PHP.
  • SSL se ignora silenciosamente. Una conexión exitosa no garantiza el cifrado. Siempre confirma con la verificación de Ssl_cipher indicada anteriormente y comprueba mysqli_connect_error() cuando mysqli_real_connect() devuelve false.
  • Orden de las llamadas. Establece las opciones SSL con mysqli_ssl_set() antes de llamar a mysqli_real_connect(), no después.

Conclusión

La función mysqli_ssl_set es una herramienta fundamental para proteger las comunicaciones de base de datos en PHP. Al configurar los parámetros SSL/TLS antes de llamar a mysqli_real_connect(), garantizas que todos los datos intercambiados entre tu aplicación y el servidor MySQL viajen a través de un canal cifrado. Verifica siempre la configuración SSL de tu servidor y comprueba el estado de la conexión para mantener una seguridad sólida en tus proyectos.

Práctica

Práctica
¿Qué es verdadero sobre mysqli_ssl_set() en PHP?
¿Qué es verdadero sobre mysqli_ssl_set() en PHP?
Was this page helpful?