PHP в MySQL Amazon RDS с SSL, подтвердите SSL - PullRequest
1 голос
/ 04 октября 2011

Я нахожу много противоречивой информации относительно использования флага MYSQL_CLIENT_SSL с вызовом mysql_connect (), настройкой и туннелем SSH ... Приемлемо ли MYSQL_CLIENT_SSL?официальная документация, похоже, указывает на «да», но многие сообщения в стеке и в других местах говорят о том, что туннель лучше, но не объясняют.MYSQL_CLIENT_SSL?Я добавил его в мой вызов mysql_connect (), и он не выдает никаких ошибок, я предполагаю, что он работает, но как я могу быть уверен?

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Вы можете проверить это с помощью этого:

$connection = mysql_connect([host], [username], [password], false, MYSQL_CLIENT_SSL)
    or die(mysql_error());
$res = mysql_query("SHOW STATUS LIKE 'ssl_cipher';", $connection);
print_r(mysql_fetch_row($res));

Вывод должен выглядеть следующим образом

Array
(
    [0] => Ssl_cipher
    [1] => xxx-xxx-xxxxxx-xxx
)
1 голос
/ 05 июня 2014

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

Документы Amazon очень полезны. Сначала вам нужно скачать файл mysql-ssl-ca-cert.pem с Amazon (см. Ссылку). Затем попробуйте подключиться с терминала, используя этот файл.

mysql --host=mydb.c83ks9ckdk39.us-east-1.rds.amazonaws.com --user=myuser -p --ssl_ca=mysql-ssl-ca-cert.pem

Amazon говорит, что вы можете ограничить подключение к SSL с помощью этого оператора предоставления, так что запускайте этот оператор, пока он подключен.

GRANT USAGE ON *.* TO 'myuser'@'%' REQUIRE SSL

Теперь отключитесь и попробуйте подключиться снова без флага "--ssl_ca = mysql-ssl-ca-cert.pem". Если вам отказано, то вы знаете, что SSL-соединения теперь требуются для этого пользователя. Теперь вам просто нужно правильно настроить php. Примерно так:

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$link->ssl_set(NULL,NULL,"mysql-ssl-ca-cert.pem",NULL,NULL); 
$ok = $link->real_connect($MYSQL['host'], $MYSQL['user'], $MYSQL['pass'], $MYSQL['db'], 3306, NULL, MYSQLI_CLIENT_SSL);

Если вы можете подключиться, то вы подключены с помощью SSL, и вы можете запустить запрос Тома, чтобы подтвердить, если хотите.

$rs = $link->query("SHOW STATUS LIKE 'ssl_cipher'");
print_r($rs->fetch_assoc());
...