Сделайте docker wordpress:php8.3-apache mysql, чтобы использовать соединение с шифрованием

Я пытаюсь настроить https://hub.docker.com/_/wordpress -> клиент mysql wordpress:php8.3-apache для использования шифрования соединения с сервером MySQL.

Я определил параметры MYSQL в wp-config.php.

define("MYSQL_CLIENT_FLAGS", MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
define("DB_SSL", true);
define("MYSQL_SSL_KEY", "/usr/src/wordpress/sql/client-key.pem");
define("MYSQL_SSL_CERT", "/usr/src/wordpress/sql/client-cert.pem");
define("MYSQL_SSL_CA", "/usr/src/wordpress/sql/server-ca.pem");

Очевидно, я также скопировал эти файлы (*.pem) в указанный каталог /usr/src/wordpress/sql/

Проблема в том, что я получаю ошибку «Доступ запрещен». Я считаю, что сертификаты не используются.

PHP Warning: mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'x.190' (using password: YES) in /usr/src/wordpress/wp-includes/class-wpdb.php on line 1987

Почему это происходит? Как я могу проверить, использует ли он предоставленные сертификаты, и если нет, то почему бы и нет?

Как создается пользователь в MySQL? Какая версия MySQL? Содержит ли сервер MySQL ключ/сертификат CA? Почему вы используете пользователя root для WordPress?

danblack 17.03.2024 03:37

версия mysql не имеет к этому никакого отношения. Это просто куча мусора под названием PHP и WordPress. MySQL — это управляемый сервер в Google Cloud, на котором я создал сертификаты. Wordpress просто не может обрабатывать сертификаты для MySQL «из коробки». Есть проблемы более 10 лет как с самим WordPress, так и с PHP.

mike 17.03.2024 19:41

связано с билетом wp 28625?

danblack 18.03.2024 00:52

Да, открылся 10 лет назад...

mike 18.03.2024 08:57

Поскольку вы нашли ответ, хотите ли вы закрыть вопрос, ответить самостоятельно или проголосовать за него и принять существующий ответ?

Mike Szyndel 18.03.2024 18:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это выглядит как типичный драгоценный камень экосистемы PHP. В документации по опциям mysqli есть комментарий 17-летней давности, в котором говорится:

Although it is not explained on the manual, 
MYSQLI_OPT_SSL_VERIFY_SERVER_CERT is an option only valid for mysqlnd
and will raise an error if used with mysqli.

Это дало мне подсказку, и после нескольких тестов я обнаружил, что WordPress по какой-то причине не использует mysqlnd. mysqlnd не установлен. Установка кажется невыполнимой задачей, поэтому я отказался от этого. По сути, все константы сертификата были определены напрасно (т. е. бесполезно), и WordPress не поддерживает зашифрованные соединения MySQL (по крайней мере, не через конфигурацию).

Похоже, что метод использования сертификатов для MySQL заключается в редактировании /usr/src/wordpress/wp-includes/class-wpdb.php и использовании mysqli_ssl_set:

mysqli_ssl_set($this->dbh, MYSQL_SSL_KEY, MYSQL_SSL_CERT, MYSQL_SSL_CA,NULL,NULL); сразу после mysqli_init()

Вы можете использовать эту строку во время процесса сборки: sed -i -e 's/mysqli_init();/mysqli_init();\nmysqli_ssl_set($this->dbh, MYSQL_SSL_KEY, MYSQL_SSL_CERT, MYSQL_SSL_CA,NULL,NULL);/g' /usr/src/wordpress/wp-includes/class-wpdb.php

Также есть примечание , в котором говорится Be warned, MySQL prior to versions 5.7.3 do not require the server to use SSL [1]. In the case of PHP the client won't throw an error if the connection is downgraded to plain-text [2], поэтому относитесь к этому шифрованию/безопасности с недоверием.

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

Другие вопросы по теме