Настройте Wordpress в облачной службе Azure для подключения к Azure MySQL по протоколу SSL
Мы запускаем Wordpress в подпапке нашего основного.СЕТЕВОЕ решение на облачном сервисе. Мы переместили наш MySQL из CloudDB в Azure MySQL, однако он будет подключаться только в том случае, если мы отключим "Принудительное SSL-соединение".
Вордпресс wp-config.php имеет следующее
define('DB_SSL', true);
Я предполагаю, что проблема в том, что нам нужно передать сертификат, но мне не ясно, как мы можем установить его в Wordpress, чтобы он передавался при подключении по SSL.
3 answers
Вот что я сделал:
Получите SSL-сертификат и сохраните файл сертификата в корневом каталоге моего проекта Wordpress.
-
Добавьте следующее в
wp-config.php
:define('DB_SSL', true);
-
Добавьте это в функцию
db_connect()
в моемwp-includes/wp-db.php
. Он должен быть вызван раньшеmysqli_real_connect()
:// Just add this line mysqli_ssl_set($this->dbh, NULL, NULL, ABSPATH . 'BaltimoreCyberTrustRoot.crt.pem', NULL, NULL); if ( WP_DEBUG ) { mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags ); } else { @mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags ); }
Решение кажется немного грязным, но оно работает для меня.
Я обнаружил, что решение намного проще при использовании сервера базы данных MySQL Azure в сочетании с изображением контейнера Wordpress. Если вы используете VPS, это может быть неприменимо.
- Загрузите файл BaltimoreCyberTrustRoot.crt.pem, на который ссылается здесь: https://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl
- Поместите файл в корневой каталог вашей установки Wordpress
- Добавьте эти две переменные в wp-конфигурация:
define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL );
define('MYSQL_SSL_CA_PATH','/');
Это решит проблему, добавив эти строки в wp_config.php
define(‘MYSQL_CLIENT_FLAGS’, MYSQLI_CLIENT_SSL);
define(‘MYSQL_SSL_CA’, getenv(‘MYSQL_SSL_CA’));
define(‘MYSQL_CLIENT_FLAGS’, MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT );