Добавить возможность использования SSL при соединении с БД

6

MySQL имеет поддержку SSL, однако в конфигурационном файле /wa-config/db.php отсутствует возможность передачи ключей сертификата. Если посмотреть на реализацию метода подключение к БД, допустим адаптера Mysqli, то увидим, что такая возможность в фреймворке отсуствует:

    public function connect($settings)
    {
        $host = $settings['host'];
        $port = isset($settings['port']) ? $settings['port'] : ini_get("mysqli.default_port");
        $handler = @new mysqli($host, $settings['user'], $settings['password'], $settings['database'], $port);
         ...
    }

Использования SSL поможет разделить основной сервер, от сервера БД.

3 комментария

  • +1

    Крайне редко встречал боевые использования этого. Более того, вы в топике не высказали предложение. Идея понятна, но смысл туманен...

    И кстати сконфигурировать SSL  вMYSQL насколько я помню без root практически невозможно, а это означает, что 80% установок эту фишку не смогут использовать.

    • +2

      а это означает, что 80% установок эту фишку не смогут использовать

      Согласен с Вами, данный функционал необходим для узкого круга, но он необходим для серьёзных проектов, которые задумываются: 

      - о защите трафика при общении сервера с сервером БД.

      - о защите БД, в случаи аппаратных сбоев.

      - об оптимизации скорости ответа.

      Предложение:

      В конф файле db.php, дать возможность указывать ключи SSL, что-то типа:

            'SSL' => array(
      
               MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem',
      
               MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',
      
               MYSQL_ATTR_SSL_CA => '/path/to/ca-cert.pem',
            ),

      В адаптере делать проверку, если используется поле, подключаться с использованием SSL


      В современных фреймворках PHP, такая возможность везде есть, я не думаю, что она будет лишней в fw webasyst, там правки минимальны.

    • +1
      replicant replicant 28 июля 2022 07:13 #

      Немного добавлю.

      К защите БД в случае аппаратных сбоев и оптимизации скорости ответа это не имеет никакого отношения.

      Речь только о защите трафика и только тогда, когда никак нельзя создать приватный канал для соединения серверов в пределах полностью подконтрольных физических или виртуальных сетей.

      Обычно сначала создается канал (vlan, физика, туннелирование и т.п.), а потом внутрь него уже заворачивается любой нужный вам трафик и в таком случае на SSL как правило уже наплевать т.к. двойная работа.

      Разделения групп web-серверов от серверов (кластеров) БД в пределах одного или нескольких ЦОД и так используются в крупных проектах повсеместно, но с таким учетом, что между серверами минимальное время отклика (чем меньше тем лучше) т.е. минимальное кол-во узлов маршрутизации и хорошая пропусная способность (гарантированная скорость).

      В случае негарантированных параметров передачи данных между узлами (web и db) использование такого разделения в крупных проектах недопустимо. По крайней мере я бы на такое не подписался при наличии любых других возможностей решения задачи.

      Собственно даже storage (nas) часто не лежат в одной корзине сервера, а распределены по ЦОД (одному или нескольким) физически, а тут какой-то mysql ssl. :)

      Добавить комментарий

      Чтобы добавить комментарий, зарегистрируйтесь или войдите