W3docs

Guide complet sur la fonction mysqli_ssl_set en PHP

Découvrez comment mysqli_ssl_set configure les paramètres SSL/TLS pour établir une connexion sécurisée à un serveur MySQL en PHP.

Lors de l'utilisation de bases de données MySQL en PHP, l'extension mysqli propose de nombreuses fonctions pour effectuer des opérations sur les bases de données. L'une d'elles est mysqli_ssl_set, qui configure les paramètres SSL/TLS afin d'établir une connexion sécurisée avec un serveur MySQL.

Dans ce guide, nous expliquerons comment fonctionne mysqli_ssl_set, ses paramètres et comment l'implémenter correctement dans vos projets PHP.

Qu'est-ce que la fonction mysqli_ssl_set ?

La fonction mysqli_ssl_set est une fonction PHP intégrée qui configure les options SSL/TLS pour un objet de connexion MySQL. Elle permet de garantir la sécurité de la transmission des données entre votre script PHP et le serveur MySQL.

La fonction prend six paramètres. Le premier argument est l'objet de connexion MySQL retourné par mysqli_init(). Les arguments suivants spécifient les chemins vers la clé SSL, le certificat, le certificat CA, le chemin du certificat CA et la suite de chiffrement.

Voici la syntaxe de la fonction mysqli_ssl_set :

Syntaxe de la fonction mysqli_ssl_set

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

Paramètres

ParamètreDescription
$connectionUn objet de connexion créé avec mysqli_init(). Obligatoire.
$keyChemin vers le fichier de clé privée du client (PEM). Passez null si non utilisé.
$certChemin vers le fichier de certificat de clé publique du client (PEM). Passez null si non utilisé.
$caChemin vers le fichier de l'autorité de certification (CA) utilisé pour vérifier le serveur. Passez null si non utilisé.
$capathChemin vers un répertoire de certificats CA de confiance au format PEM. Passez null si non utilisé.
$cipherListe des algorithmes de chiffrement autorisés pour SSL/TLS. Passez null pour utiliser les valeurs par défaut.

Tout paramètre dont vous n'avez pas besoin peut être passé comme null. Une configuration minimale courante ne fournit que le fichier CA ($ca) afin que le client puisse vérifier le certificat du serveur, en laissant le reste à null.

Quand l'utiliser ?

Vous utilisez mysqli_ssl_set chaque fois que l'application PHP et le serveur MySQL communiquent sur un réseau non fiable — par exemple, un serveur web se connectant à une base de données cloud gérée, ou toute connexion traversant l'internet public. Sans SSL/TLS, les identifiants et les résultats des requêtes circulent en texte clair et peuvent être lus par quiconque peut observer le trafic.

Fonctionnalités de la fonction mysqli_ssl_set

La fonction mysqli_ssl_set offre plusieurs capacités qui la rendent indispensable pour sécuriser les communications avec les bases de données en PHP. Parmi ses principales fonctionnalités :

1. Transmission sécurisée des données

L'objectif principal de mysqli_ssl_set est de configurer un canal chiffré SSL/TLS entre votre application PHP et le serveur MySQL. Cela protège les données sensibles contre toute interception lors de leur transit.

2. Configuration avant la connexion

La fonction vous permet de définir les paramètres SSL sur un objet de connexion avant que la connexion réelle ne soit établie. Cela garantit que le serveur impose le chiffrement dès le début de la négociation.

3. Valeur de retour booléenne

La fonction retourne une valeur boolean indiquant le succès ou l'échec. Elle ne génère pas automatiquement d'avertissements ou d'erreurs ; vous devez donc vérifier la valeur de retour et utiliser mysqli_connect_error() ou mysqli_error() pour obtenir des informations détaillées sur l'échec si nécessaire.

Comment utiliser la fonction mysqli_ssl_set

Pour utiliser mysqli_ssl_set correctement, vous devez initialiser l'objet de connexion, définir les paramètres SSL, puis établir la connexion à l'aide de mysqli_real_connect(). L'ordre est important : mysqli_ssl_set() ne fait que stocker les options SSL sur l'objet de connexion. Elles sont appliquées lors de la négociation effectuée par mysqli_real_connect(), donc appeler mysqli_ssl_set() après qu'une connexion est déjà ouverte n'a aucun effet.

1. Initialiser et configurer les paramètres SSL

D'abord, créez un objet de connexion avec mysqli_init(), puis appliquez les paramètres SSL avant de vous connecter :

Exemple de la fonction 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. Vérifier la connexion chiffrée

Après la connexion, vous pouvez vérifier que SSL est actif en interrogeant l'état du serveur avec mysqli_query(). Si la connexion est chiffrée, Ssl_cipher retourne le nom du chiffrement négocié ; s'il est vide, la connexion n'utilise pas 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.';
}
?>

Pièges courants

  • L'échec de vérification du certificat. Si mysqli_real_connect() échoue avec une erreur de certificat, assurez-vous que le fichier $ca correspond à l'autorité qui a signé le certificat du serveur, et que le fichier est lisible par le processus PHP.
  • SSL ignoré silencieusement. Une connexion réussie ne garantit pas le chiffrement. Confirmez toujours avec la vérification Ssl_cipher ci-dessus, et vérifiez mysqli_connect_error() lorsque mysqli_real_connect() retourne false.
  • Ordre des appels. Définissez les options SSL avec mysqli_ssl_set() avant d'appeler mysqli_real_connect(), pas après.

Conclusion

La fonction mysqli_ssl_set est un outil essentiel pour sécuriser les communications avec les bases de données en PHP. En configurant les paramètres SSL/TLS avant d'appeler mysqli_real_connect(), vous vous assurez que toutes les données échangées entre votre application et le serveur MySQL transitent par un canal chiffré. Vérifiez toujours la configuration SSL de votre serveur et contrôlez l'état de la connexion pour maintenir une sécurité robuste dans vos projets.

Practice

Pratique
Qu'est-ce qui est vrai à propos de mysqli_ssl_set() en PHP ?
Qu'est-ce qui est vrai à propos de mysqli_ssl_set() en PHP ?
Was this page helpful?