PHP Mysql Межпроцессный TLS

Я довольно новичок в работе с системным администратором, особенно на этом уровне, и мне было поручено установить «отраслевой стандарт» способ аутентификации межпроцессного взаимодействия между приложением PHP и сервером баз данных MySQL.

Я не могу найти какую-либо ссылку в документации MySQL или PHP. Я обнаружил огромное количество информации о стандартном TLS между PHP и Mysql для целей шифрования, однако абсолютно ничего не говорится о взаимной аутентификации (аутентификации приложения PHP внутри Mysql). Это возможно с или без пользовательских плагинов?

1

Решение

TLS только гарантирует, что люди не смогут снять ваши учетные данные «с провода», используя инструменты отслеживания пакетов. Это не делает ничего, чтобы гарантировать идентичность устройства или приложения, подключающегося к MySQL.

Для такого рода вещей вам нужен дополнительный уровень, такой как SSH, или какое-то специальное приложение, которое выполняет проверку перед тем, как разрешить соединение с MySQL через прокси-канал какого-либо вида. Это может быть сложным делом, и это, безусловно, не отраслевой стандарт.

Текущий стандарт довольно прост:

  • Ограничьте, какие машины имеют доступ к вашему серверу MySQL через агрессивные правила брандмауэра. Порт 3306 должен никогда быть открытым для общего интернета. По крайней мере, он должен быть заблокирован для нескольких IP-адресов из белого списка или сетевого блока, например 192.168.x.0 / 24, для части вашей внутренней частной сети.
  • Используйте туннелирование TLS или SSH, если вы не можете гарантировать, что соединения между сервером MySQL и приложением не защищены. Это важно, если ваши серверы находятся в разных физических местах, и вы не можете гарантировать безопасность соединения.
  • Сделайте ваши логин и пароль достаточно сложными и грубыми. Так как они настроены на уровне приложения, 60+ буквенных паролей не являются проблемой. Сделайте их большими и совершенно случайными. Вам никогда не придется вводить их вручную. Используйте файл конфигурации или менеджер паролей.

Если у вас есть дополнительные проблемы сделать аудит уважаемой охранной фирмой, чтобы убедиться в правильности вашей стратегии.

2

Другие решения

Есть два подхода, которые широко используются. Во-первых, если приложение PHP правильно проверяет сертификат сервера MySQL, то вы знаете, что сервер MySQL является тем, кем он себя считает. Это подтверждает подлинность MySQL для PHP. Затем, когда вы отправляете пароль базы данных, вы аутентифицируете приложение php на сервере MySQL. Вы использовали разные подходы в каждом направлении, но достигли взаимной аутентификации. На сегодняшний день это наиболее распространенный подход, и он соответствует определению взаимной аутентификации.

Менее распространенный подход заключается в использовании клиентские сертификаты; см. текст, начинающийся с «Требовать, чтобы также использовался сертификат клиента.» Используя аргументы —ssl-cert и —ssl-key для командной строки mysql (и аналогичные аргументы подключения из php), вы можете предоставить сертификат клиента на сервер. Сертификат сервера используется для проверки подлинности сервера на php, а сертификат клиента — для проверки подлинности php на сервере.

0

По вопросам рекламы [email protected]