Ошибка удаленного подключения MySQL SSL: невозможно получить закрытый ключ

Я пытаюсь написать PHP-скрипт (размещенный на VPS с GoDaddy), который подключается к удаленной базе данных MySQL (размещенной на экземпляре Amazon EC2) с помощью SSL.

я сгенерировал несколько сертификатов (по состоянию на http://dev.mysql.com/doc/refman/5.0/en/creating-ssl-certs.html) и настроен мой.cnf в базе данных remote / server так:

[mysqld]
ssl-ca      =/etc/mysql/ca-cert.pem
ssl-cert    =/etc/mysql/server-cert.pem
ssl-key     =/etc/mysql/server-key.pem

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

конфигурация работает на стороне remote / server (то есть php-скрипт работает локально к удаленной базе данных можно установить соединение с помощью сгенерированных SSL сертификатов).

однако, хотя я могу сделать незащищенное соединение между PHP-скриптом, размещенным на VPS, и удаленной базой данных, я получаю ошибку, когда пытаюсь установить SSL-соединение между теми же двумя системами.

если я пытаюсь подключиться к удаленной базе данных через командную строку, используя:

mysql -h hostIP --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem –u ssluser –p

я получаю сообщение об ошибке:

ERROR 2026 (HY000): SSL connection error: Unable to get private key

я получаю ту же ошибку, когда Я пытаюсь подключиться к серверу через php-скрипт, используя:

<?php
 $link = mysqli_init();

 $key   = '/home/userName/etc/mysql/certs/client-key.pem' ; 
 $cert  = '/home/userName/etc/mysql/certs/client-cert.pem'; 
 $ca    = '/home/userName/etc/mysql/certs/ca-cert.pem';
 $capath = NULL;
 $cipher = NULL;

 mysqli_ssl_set ( $link , $key , $cert , $ca , $capath , $cipher );
 mysqli_real_connect ($link, $host, $user, $pass, $schema, 3306, NULL, MYSQLI_CLIENT_SSL);
?>

приводит к ошибке:

(HY000/2026): SSL connection error: Unable to get private key

Я уже попытался исправить согласно (forums.mysql.com/read.php?11, 400856, 401127), но это изменение приводит к "ошибке сегментации".

есть ли шаг, который я пропустил? Что я делаю не так?

3 ответов


разрешить:

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

openssl rsa -in client-key.pem -out client-key2.pem

согласно инструкциям на этот сайт.

сменил

$key   = '/home/userName/etc/mysql/certs/client-key2.pem' ; 

и

mysql -h hostIP --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key2.pem –u ssluser –p

а не

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

'openssl genrsa' генерирует ключевой вывод:

  -----BEGIN RSA PRIVATE KEY-----
    ...

    -----END RSA PRIVATE KEY----- 

'openssl pkey' или openssl req-newkey..... ключевые выход:

-----BEGIN PRIVATE KEY----- 
... 

-----END PRIVATE KEY----- 

Mysql Server ищет RSA в начале и конце. Добавление RSA после начала и конца решило проблему для меня.

проверить ссылку для деталей mysql форум


Я мой случай, владелец сервера-ключа.pem был root, а не mysql.