W3docs

Подробное руководство по функции mysqli_ssl_set в PHP

Функция mysqli_ssl_set в PHP настраивает параметры SSL/TLS для установки безопасного соединения с сервером MySQL через расширение mysqli.

При работе с базами данных MySQL в PHP расширение mysqli предоставляет множество функций для выполнения операций с базой данных. Одна из таких функций — mysqli_ssl_set, которая настраивает параметры SSL/TLS для установки безопасного соединения с сервером MySQL.

В этом руководстве мы объясним, как работает mysqli_ssl_set, каковы её параметры и как правильно использовать её в PHP-проектах.

Что такое функция mysqli_ssl_set?

Функция mysqli_ssl_set — это встроенная функция PHP, которая настраивает параметры SSL/TLS для объекта соединения с MySQL. Она используется для обеспечения безопасной передачи данных между PHP-скриптом и сервером MySQL.

Функция принимает шесть параметров. Первый аргумент — объект соединения с MySQL, возвращённый функцией mysqli_init(). Остальные аргументы указывают пути к SSL-ключу, сертификату, сертификату CA, пути к сертификатам CA и набору шифров.

Вот синтаксис функции mysqli_ssl_set:

Синтаксис функции mysqli_ssl_set

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

Параметры

ПараметрОписание
$connectionОбъект соединения, созданный с помощью mysqli_init(). Обязательный.
$keyПуть к файлу закрытого ключа клиента (PEM). Передайте null, если не используется.
$certПуть к файлу сертификата открытого ключа клиента (PEM). Передайте null, если не используется.
$caПуть к файлу центра сертификации (CA), используемому для проверки сервера. Передайте null, если не используется.
$capathПуть к каталогу доверенных сертификатов CA в формате PEM. Передайте null, если не используется.
$cipherСписок допустимых шифров для SSL/TLS. Передайте null, чтобы использовать значения по умолчанию.

Любой параметр, который не нужен, можно передать как null. Минимальная конфигурация обычно включает только файл CA ($ca), чтобы клиент мог проверить сертификат сервера, оставляя остальные параметры как null.

Когда следует использовать?

Функция mysqli_ssl_set используется всякий раз, когда PHP-приложение и сервер MySQL взаимодействуют через недоверенную сеть — например, веб-сервер подключается к управляемой облачной базе данных или любое соединение, проходящее через публичный интернет. Без SSL/TLS учётные данные и результаты запросов передаются в открытом виде и могут быть прочитаны любым, кто может наблюдать за трафиком.

Возможности функции mysqli_ssl_set

Функция mysqli_ssl_set предоставляет несколько возможностей, которые делают её незаменимой для обеспечения безопасности коммуникации с базой данных в PHP. Среди ключевых возможностей:

1. Безопасная передача данных

Основная цель mysqli_ssl_set — настроить зашифрованный канал SSL/TLS между PHP-приложением и сервером MySQL. Это защищает конфиденциальные данные от перехвата во время передачи.

2. Конфигурация до установки соединения

Функция позволяет задать параметры SSL для объекта соединения до того, как фактическое соединение будет установлено. Это гарантирует, что сервер будет обеспечивать шифрование с момента начала рукопожатия.

3. Булево возвращаемое значение

Функция возвращает булево значение, указывающее на успех или неудачу. Она не генерирует предупреждения или ошибки автоматически; вместо этого следует проверять возвращаемое значение и использовать mysqli_connect_error() или mysqli_error() для получения подробной информации об ошибке при необходимости.

Как использовать функцию mysqli_ssl_set

Для правильного использования mysqli_ssl_set необходимо инициализировать объект соединения, задать параметры SSL, а затем установить соединение с помощью mysqli_real_connect(). Порядок важен: mysqli_ssl_set() только сохраняет параметры SSL в объекте соединения. Они применяются во время рукопожатия, выполняемого mysqli_real_connect(), поэтому вызов mysqli_ssl_set() после того, как соединение уже открыто, не имеет эффекта.

1. Инициализация и настройка параметров SSL

Сначала создайте объект соединения с помощью mysqli_init(), затем примените настройки SSL перед подключением:

Пример использования функции 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. Проверка зашифрованного соединения

После подключения можно убедиться, что SSL активен, запросив статус сервера с помощью mysqli_query(). Если соединение зашифровано, Ssl_cipher возвращает название согласованного шифра; если оно пустое, соединение не использует 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.';
}
?>

Распространённые ошибки

  • Ошибка проверки сертификата. Если mysqli_real_connect() завершается с ошибкой сертификата, убедитесь, что файл $ca соответствует центру сертификации, подписавшему сертификат сервера, и что файл доступен для чтения процессу PHP.
  • SSL молча игнорируется. Успешное соединение не гарантирует шифрование. Всегда проверяйте с помощью проверки Ssl_cipher выше и проверяйте mysqli_connect_error(), когда mysqli_real_connect() возвращает false.
  • Порядок вызовов. Задавайте параметры SSL с помощью mysqli_ssl_set() до вызова mysqli_real_connect(), а не после.

Заключение

Функция mysqli_ssl_set является важным инструментом для обеспечения безопасности коммуникации с базой данных в PHP. Настраивая параметры SSL/TLS перед вызовом mysqli_real_connect(), вы гарантируете, что все данные, передаваемые между приложением и сервером MySQL, проходят по зашифрованному каналу. Всегда проверяйте конфигурацию SSL сервера и статус соединения для поддержания надёжной безопасности в ваших проектах.

Практика

Практика
Что верно о функции mysqli_ssl_set() в PHP?
Что верно о функции mysqli_ssl_set() в PHP?
Was this page helpful?