Я использую базу данных mysql на Ubuntu 18.04 LTS.
Все работает правильно, кроме случаев, когда я пытаюсь реализовать SSL, следуя этим инструкциям:
https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-16-04
https://www.acunetix.com/blog/articles/securing-mysql-server-ubuntu-16-04-lts-configuring-mysql-securely-part-3/
соединение не установлено. Я пытался реализовать его, используя как PDO, так и обычное MYSQLI-соединение, но при проверке сертификата он не работает.
Я использую PHP 7.1.8 с транспортером mysqlnd.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>SSL Connection test</title>
</head>
<body>
<?php
phpinfo();
$servername = "****";
$username = "****";
$password = "****";
$dbname = "****";
$options = array(
PDO::MYSQL_ATTR_SSL_KEY => 'client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT => 'client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA => 'ca.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
);
try {
$conn = new PDO("mysql:host=$servername;port=3306;dbname=$dbname;", $username, $password, $options);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
var_dump($conn->query("SHOW STATUS LIKE 'Ssl_cipher';")->fetchAll());
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
</body>
</html>
Это код, который я сейчас использую для проверки работоспособности.
Всякий раз, когда я делаю PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
false, соединение успешно. Если PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
истинно, соединение не устанавливается.
Сообщения об ошибках при сбое:
Ошибка подключения: SQLSTATE [HY000] [2002]
Сообщение о подключении:
Подключено успешноarray (1) {[0] => array (4) {["Variable_name"] => string (10) "Ssl_cipher" [0] => string (10) "Ssl_cipher" ["Value"] => строка (18) "DHE-RSA-AES256-SHA" [1] => строка (18) "DHE-RSA-AES256-SHA"}}
Сертификаты были проверены с помощью следующего кода:
openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
Возвращает OK для обоих файлов.
Последние пару часов я пытался это исправить, но, похоже, не могу решить проблему.
Пожалуйста, помогите мне решить эту проблему.
Редактировать: Все файлы (client-key.pem
, client-cert.pem
, ca.pem
) были протестированы с is_readable
и доступны для чтения.