Назад | Перейти на главную страницу

Почему я получаю ошибку OpenSSL при подключении PHPMyAdmin через SSL?

Я использую PHP 5.6.11 на Apache 2.2 с OpenSSL 1.0.1 на Ubuntu 12. Я успешно настроил SSL в Apache и MySQL.

Теперь я хочу настроить PHPMyAdmin и подключить его через SSL. Мне это действительно не нужно на localhost, но у меня нет другого способа проверить, правильно ли работает моя установка. Итак, вместо подключения PMA к «localhost» я подключил его к своему домену «mx.testdomain.com». Это открывает TCP-соединение и не использует обычный сокет (мне не удалось заставить SSL работать с сокетом).

Когда я вхожу в свой PMA, я получаю следующее сообщение об ошибке:

Error

SELECT * FROM information_schema.CHARACTER_SETS

MySQL reports: 
# 2006 - MySQL server has gone away

Когда я деактивирую SSL в своей конфигурации PMA, все работает нормально, но при первом входе в систему я получаю следующие «Ошибки обратной трассировки»:

Warning in ./libraries/dbi/DBIMysqli.class.php#236  mysqli_select_db(): SSL operation failed with code 1.
OpenSSL Error messages: error:0607A082:digital envelope routines:EVP_CIPHER_CTX_set_key_length:invalid key length error:0607A082:digital envelope routines:EVP_CIPHER_CTX_set_key_length:invalid key length

Я использую один и тот же сертификат SSL для Apache и MySQL.

Когда я запускаю эту команду PHP, она возвращает действительный шифр:

$link = mysql_connect("mx.testdomain.com","testadmin","testpassword",false,MYSQL_CLIENT_SSL) 
        or die(mysql_error());
$res = mysql_query("SHOW STATUS LIKE 'ssl_cipher';",$link);
print_r(mysql_fetch_row($res));
echo "Finished.";

Вывод:

Array (
    [0] => Ssl_cipher
    [1] => AES256-SHA ) Finished.

Когда я проверяю свой URL-адрес с помощью file_get_contents, я получаю следующий результат:

array(4) {
   ["protocol"]=>   string(7) "TLSv1.2"
   ["cipher_name"]=>  string(25) "DHE-RSA-AES256-GCM-SHA384"   
   ["cipher_bits"]=>   int(256)
   ["cipher_version"]=>   string(11) "TLSv1/SSLv3"
}