Подключение к удаленному серверу MySQL с помощью SSL с PHP

Я пытаюсь подключиться к удаленному серверу MySQL с помощью SSL с PHP с помощью mysql_connect:

$link = mysql_connect( "ip", "user", "pass", true, MYSQL_CLIENT_SSL ) 

И получить худшую ошибку когда-либо:

 SSL connection error 

Я добавил следующие параметры в my.cnf:

 [client] ssl-ca =/etc/mysql/ssl/ca-cert.pm ssl-cert =/etc/mysql/ssl/client-cert.pem ssl-key =/etc/mysql/ssl/client-key.pem 

Поэтому я могу успешно подключиться к удаленному mysql из терминала, используя

 #mysql -h ip -u user -p 

Поэтому подключение к серверу mysql действительно работает, и насколько я понимаю, проблема заключается в сотрудничестве php / mysql. Наверное, мне не хватает некоторых параметров.

К сожалению, я не могу использовать mysqli lib, потому что у меня слишком много рабочих адаптеров для pdo_mysql.

Моя версия PHP – 5.3.6-13ubuntu3.6. Версия MySQL – 5.1.61.

Также я добавил

 mssql.secure_connection = On 

к моему php.ini

Помощь будет оценена!

Related of "Подключение к удаленному серверу MySQL с помощью SSL с PHP"

«К сожалению, я не могу использовать mysqli lib, потому что у меня слишком много рабочих адаптеров для pdo_mysql».

Вы используете старое расширение MySQL («mysql_connect»), которое больше не разрабатывается ( только для обслуживания ). Поскольку вы используете PHP 5, вы можете использовать MySQLi , улучшенное расширение MySQL. Среди прочего, он имеет объектно-ориентированный интерфейс, поддержку подготовленных / множественных операторов и расширенные возможности отладки. Вы можете больше узнать о конвертации в MySQLi; подробнее о самом классе mysqli.

Вот пример кода, который может помочь вам начать работу:

 <?php ini_set ('error_reporting', E_ALL); ini_set ('display_errors', '1'); error_reporting (E_ALL|E_STRICT); $db = mysqli_init(); mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); $db->ssl_set('/etc/mysql/ssl/client-key.pem', '/etc/mysql/ssl/client-cert.pem', '/etc/mysql/ssl/ca-cert.pem', NULL, NULL); $link = mysqli_real_connect ($db, 'ip', 'user', 'pass', 'db', 3306, NULL, MYSQLI_CLIENT_SSL); if (!$link) { die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n"); } else { $res = $db->query('SHOW TABLES;'); print_r ($res); $db->close(); } ?> 

Если PDO_MYSQL действительно то, что вы хотите, тогда вам нужно сделать что-то вроде этого:

 <?php $pdo = new PDO('mysql:host=ip;dbname=db', 'user', 'pass', array( PDO::MYSQL_ATTR_SSL_KEY =>'/etc/mysql/ssl/client-key.pem', PDO::MYSQL_ATTR_SSL_CERT=>'/etc/mysql/ssl/client-cert.pem', PDO::MYSQL_ATTR_SSL_CA =>'/etc/mysql/ssl/ca-cert.pem' ) ); $statement = $pdo->query("SHOW TABLES;"); $row = $statement->fetch(PDO::FETCH_ASSOC); echo htmlentities($row['_message']); ?> и <?php $pdo = new PDO('mysql:host=ip;dbname=db', 'user', 'pass', array( PDO::MYSQL_ATTR_SSL_KEY =>'/etc/mysql/ssl/client-key.pem', PDO::MYSQL_ATTR_SSL_CERT=>'/etc/mysql/ssl/client-cert.pem', PDO::MYSQL_ATTR_SSL_CA =>'/etc/mysql/ssl/ca-cert.pem' ) ); $statement = $pdo->query("SHOW TABLES;"); $row = $statement->fetch(PDO::FETCH_ASSOC); echo htmlentities($row['_message']); ?> 

Однако только последние версии PHP поддерживают SSL для PDO, а параметры SSL молча игнорируются (по крайней мере) версии 5.3.8: см. Отчет об ошибке .

Удачи!

Измените заголовок [client] на [mysqld] . Вам нужно настроить сертификаты на стороне сервера, а не на стороне клиента.

Полный пример из документации MySQL.

Кроме того, см. Этот аналогичный вопрос: PHP для MySQL SSL Connections

Сертификаты сервера позволяют серверу отвечать на запросы SSL, и они не требуют, чтобы клиент имел сертификат. Каждый раз, когда вы подключаетесь к веб-сайту через HTTPS, вы используете сертификаты сервера, чтобы убедиться, что вы подключаетесь к правильному серверу, и используете открытый ключ сертификата для шифрования.

Сертификаты клиентов позволяют серверу аутентифицировать клиента.

В вашем случае вам нужны сертификаты сервера. Вы хотите установить сертификаты на сервере (MySQL), а клиент (PHP) сможет аутентифицировать сервер и использовать открытый ключ сертификата для настройки шифрования. Сертификаты клиентов довольно редки.

Если вы хотите использовать клиентские сертификаты, вы должны использовать mysqli или PDO .