mysqli_real_connect () получает SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата

Мы только что обновились до php 5.6 от PHP 5.4, и все работало нормально с подключением MySQL с использованием MySQLi и SSL.

Наша связь выглядит так:

mysqli_real_connect($db, $host, $username, $password, $database, $port, $socket, MYSQLI_CLIENT_SSL);
mysqli_set_charset($db, "utf8");

Но теперь, когда мы пытаемся подключиться к MySQL через SSL, используя php 5.6, мы получаем:

Предупреждение: mysqli_real_connect (): операция SSL не выполнена с кодом 1.
Сообщения об ошибках OpenSSL: ошибка: 14090086: SSL
подпрограммы: SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата в
/MySQLConnection.php в строке 29

Предупреждение: mysqli_real_connect (): невозможно подключиться к MySQL с помощью SSL
в /MySQLConnection.php в строке 29

Предупреждение: mysqli_real_connect (): [2002] (пытается подключиться через
tcp: //mysql1.ourdomain.com: 3306) в /MySQLConnection.php в строке 29

Предупреждение: mysqli_real_connect (): (HY000 / 2002): в /MySQLConnection.php
на линии 29

Я попытался установить:

mysqli_options($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false);

Но это не помогает.

ОБНОВИТЬ

Я добавил:

$mysql_certs_path = "/full/path/to/certs/mysql";
mysqli_ssl_set($db, $mysql_certs_path . "/client-key.pem", $mysql_certs_path . "/client-cert.pem", $mysql_certs_path . "/ca-cert.pem", null, null);

И все еще получаю:

Предупреждение: mysqli_real_connect (): операция SSL не выполнена с кодом 1.
Сообщения об ошибках OpenSSL: ошибка: 14090086: SSL
подпрограммы: SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата в
/MySQLConnection.php в строке 31

Warning: mysqli_real_connect(): Cannot connect to MySQL by using SSL in /MySQLConnection.php on line 31

0

Решение

@jww, я написал пост, в котором точно описаны проблемы, с которыми сталкивается @Justin. В соответствии с мой пост, CN сертификата, выданного Google Cloud SQL, имеет вид:

CN=project-name:instance-id
0

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

Случилось ли что-то подобное со мной? Когда я обновил PHP до 5.6, это сработало. Но когда я вошел:

sudo apt-get install php5-mysqlnd

В Ubuntu 15.04 перестал работать SSL для AWS RDS, хотя он работал с драйвером libmysql. Бег:

sudo apt-get install php5-mysql

Установил старые драйверы и он снова начал работать. Насколько я могу понять, он не проходит проверку однорангового имени для подключения к RDS. Я не знаю, как это исправить, и поскольку он использует потоки PHP для своего соединения, настройки, кажется, не имеют значения, что вы передаете.

Это известная ошибка:

https://bugs.php.net/bug.php?id=68344

Итак, я написал этот метод, модифицированный отсюда: Как узнать, является ли MySQLnd активным драйвером?

public function getMySQLIType()
{
$mysqlType = [
'mysql' => false,
'mysqli' => false,
'mysqlnd' => false,
];

if (function_exists('mysql_connect')) {
$mysqlType['mysql'] = true;
}

if (function_exists('mysqli_connect')) {
$mysqlType['mysqli'] = true;
}

if (function_exists('mysqli_get_client_stats')) {
$mysqlType['mysqlnd'] = true;
}

return $mysqlType;
}

Если массив возвращает true для mysqlnd, я отключаю SSL. Если возвращает false, то я включаю его. Пока что это работает. Да, это хакерское исправление, но я не знаю, как законно решить эту проблему.

0

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