Я использую 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"
}