Допустим, у меня есть клиент, который дает мне учетные данные db, и они хотят подключиться к db с защищенным/зашифрованным. Они также включили ssl в настройках mysql. Когда они дают мне свои кредиты db, я не хочу спрашивать их о ключах и сертификатах. Так можно ли зашифровать безопасное соединение через ssl при подключении к клиентам db без этих элементов?
обновление: так после дальнейшего возиться вокруг
$db->ssl_set(NULL, NULL,'/path_to_self_signed_cert/ca.pem',NULL,'');
$db->real_connect('hostname','username','password','dbname',
'port'socket', MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);'
это сделало меня результатом, который я хотел, после запуска этого
$db->query("SHOW STATUS LIKE 'Ssl_cipher';");
отображает алгоритм шифрования вместо того, чтобы быть пустым
(
[0] => Ssl_cipher
[Variable_name] => Ssl_cipher
[1] => DHE-RSA-AES128-SHA
[Value] => DHE-RSA-AES128-SHA
)
но не знаю, почему это сработало, это самоподписанный сертификат надлежащего способа сделать это?
@rickjerrity я подключается к удаленному db через командную строку и проверяет состояние, запустив \s
и говорит SSL: Cipher in use is DHE-RSA-AES256-SHA
. Но когда я подключаюсь к одной базе данных с использованием php и используя те же учетные данные, он говорит, что шифр пуст. вот код, который я использовал для подключения к удаленному db
$db = mysqli_init();
$db->real_connect('hostname','username','password','dbname');
$res = $db->query("SHOW STATUS LIKE 'Ssl_cipher';");
while ( $row = $res->fetch_array() ) {
print_r($row);
}
$db->close();
и ответ
[0] => Ssl_cipher
[Variable_name] => Ssl_cipher
[1] =>
[Value] =>
Для безопасного соединения с db, кроме учетных данных db, не требуется сертификат или ключ на стороне клиента. PHP должен проверять целостность сертификата SSL при подключении. Любые другие методы PHP, способные проверять статус шифрования соединения, были бы разумными, как вы упомянули. Если вы укажете некоторые примеры кода, мы сможем оказать дальнейшую помощь.