MySQL и SSL

Материал из 1GbWiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 16:26, 22 ноября 2018 (править)
Renton (Обсуждение | вклад)
(Ruby)
← К предыдущему изменению
Текущая версия (22:00, 29 ноября 2018) (править) (отменить)
Chapay (Обсуждение | вклад)

 
Строка 1: Строка 1:
-Начиная с версии MySQL 5.7, хостинг 1Гб.ру поддерживает защищенное подключение к базам MySQL с использованием протокола SSL.+Начиная с версии MySQL 5.7, хостинг 1gb.ua поддерживает защищенное подключение к базам MySQL с использованием протокола SSL.
== Для чего это нужно == == Для чего это нужно ==
Строка 6: Строка 6:
<p>В случае установления SSL соединения между MySQL клиентом и сервером, данные передаются по каналу в зашифрованным виде, что исключает их свободное чтение при перехвате трафика.</p> <p>В случае установления SSL соединения между MySQL клиентом и сервером, данные передаются по каналу в зашифрованным виде, что исключает их свободное чтение при перехвате трафика.</p>
-<p>Данная возможность будет полезна, если вы используете базы данных хостинга 1Гб.ру с удаленных клиентов через публичные сети, то есть с клиентов, размещенных не на площадке хостинга. Типичные примеры использования: с сайта на другом хостинге, из программы запущенной дома или в офисе и т.п.</p>+<p>Данная возможность будет полезна, если вы используете базы данных хостинга 1gb.ua с удаленных клиентов через публичные сети, то есть с клиентов, размещенных не на площадке хостинга. Типичные примеры использования: с сайта на другом хостинге, из программы запущенной дома или в офисе и т.п.</p>
-<p>В том случае если сайт и база данных размещены в 1Гб.ру, то использование SSL нецелесообразно, так как информация не передается по публичным каналам, что исключает ее перехват.</p>+<p>В том случае если сайт и база данных размещены в 1gb.ua, то использование SSL нецелесообразно, так как информация не передается по публичным каналам, что исключает ее перехват.</p>
== Как воспользоваться == == Как воспользоваться ==
Строка 26: Строка 26:
'''SSL: Cipher in use is DHE-RSA-AES256-SHA''' '''SSL: Cipher in use is DHE-RSA-AES256-SHA'''
-Если у вас mysql-клиент младше версии 5.7.3, то для подключения потребуется специальный сертификат для проверки подлинности, скачать вы можете его со страницы [https://www.1gb.ru/in-solve-2016.crt Корневой сертификат безопасности 1Gb.ru], например+Если у вас mysql-клиент младше версии 5.7.3, то для подключения потребуется специальный сертификат для проверки подлинности, скачать вы можете его со страницы [http://www.1gb.ua/1gbuarootCA.crt Корневой сертификат безопасности 1gb.ua], например
- $ wget <nowiki>https://www.1gb.ru/in-solve-2016.crt</nowiki>+ $ wget <nowiki>https://www.1gb.ua/1gbuarootCA.crt</nowiki>
- $ mysql -s --ssl-ca=in-solve-2016.crt -hадрес_сервера_mysql -uимя_пользователя имя_базы -p+ $ mysql -s --ssl-ca=1gbuarootCA.crt -hадрес_сервера_mysql -uимя_пользователя имя_базы -p
mysql> \s mysql> \s
-------------- --------------
Строка 71: Строка 71:
==== Python ==== ==== Python ====
На примере использования модуля [https://pypi.org/project/mysqlclient/ mysqlclient]. Также потребуется удостоверяющий сертификат: На примере использования модуля [https://pypi.org/project/mysqlclient/ mysqlclient]. Также потребуется удостоверяющий сертификат:
- $ wget <nowiki>https://www.1gb.ru/in-solve-2016.crt</nowiki>+ $ wget <nowiki>https://www.1gb.ua/1gbuarootCA.crt</nowiki>
$ python $ python
Python 3.7.0 (default, Sep 14 2018, 13:53:54) Python 3.7.0 (default, Sep 14 2018, 13:53:54)
Строка 88: Строка 88:
С использованием модуля [https://github.com/brianmario/mysql2 mysql2] С использованием модуля [https://github.com/brianmario/mysql2 mysql2]
- $ wget <nowiki>https://www.1gb.ru/in-solve-2016.crt</nowiki>+ $ wget <nowiki>https://www.1gb.ua/1gbuarootCA.crt</nowiki>
#!/usr/bin/env ruby #!/usr/bin/env ruby
require "mysql2" require "mysql2"

Текущая версия

Начиная с версии MySQL 5.7, хостинг 1gb.ua поддерживает защищенное подключение к базам MySQL с использованием протокола SSL.

Содержание

[править] Для чего это нужно

MySQL клиент (веб-сайт) и сервер баз данных MySQL обмениваются друг с другом информацией по открытому каналу связи. Это значит, что если злоумышленник имеет доступ к прослушке канала, то данные, которые хранятся или записываются сайтом в базу, могут стать доступными для перехвата, так как передаются открытым текстом.

В случае установления SSL соединения между MySQL клиентом и сервером, данные передаются по каналу в зашифрованным виде, что исключает их свободное чтение при перехвате трафика.

Данная возможность будет полезна, если вы используете базы данных хостинга 1gb.ua с удаленных клиентов через публичные сети, то есть с клиентов, размещенных не на площадке хостинга. Типичные примеры использования: с сайта на другом хостинге, из программы запущенной дома или в офисе и т.п.

В том случае если сайт и база данных размещены в 1gb.ua, то использование SSL нецелесообразно, так как информация не передается по публичным каналам, что исключает ее перехват.

[править] Как воспользоваться

Проверьте, что ваша база данных создана на сервере MySQL 5.7, в личном кабинете начало -> базы данных

База данных в личном кабинете 1Gb.ru
База данных в личном кабинете 1Gb.ru

Если база данных находится на другом сервере, создайте новую, выбрав версию MySQL 5.7 или выше.

[править] Консольный клиент mysql

Современные MySQL клиенты умеют автоматически устанавливать SSL соединение, если видят, что данная возможность присутствует на сервере. Например, подключение из консольного клиента mysql:

$ mysql -s -hадрес_сервера_mysql -uимя_пользователя имя_базы -p
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using  EditLine wrapper

Connection id:          374517
SSL:                    Cipher in use is DHE-RSA-AES256-SHA

Если у вас mysql-клиент младше версии 5.7.3, то для подключения потребуется специальный сертификат для проверки подлинности, скачать вы можете его со страницы Корневой сертификат безопасности 1gb.ua, например

$ wget https://www.1gb.ua/1gbuarootCA.crt
$ mysql -s --ssl-ca=1gbuarootCA.crt -hадрес_сервера_mysql -uимя_пользователя имя_базы -p
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.6.36, for Linux (x86_64) using  EditLine wrapper

Connection id:          377004
SSL:                    Cipher in use is DHE-RSA-AES256-SHA

[править] Подключение из PHP

[править] PHP 7 и выше

<?php

$db_host = 'адрес_сервера_бд';
$db_user = 'имя_пользователя_бд';
$db_name = 'имя_бд';
$db_pass = 'пароль_бд';

$db = mysqli_init();
if (! $link = mysqli_real_connect($db, $db_host, $db_user, $db_pass, $db_name, NULL, NULL, MYSQLI_CLIENT_SSL)) {
    die('Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error() . "\n");
}

$res = $db->query("SHOW STATUS LIKE 'Ssl_cipher'");
while ($row = $res->fetch_array()) {
    print_r($row);
}

mysqli_close($db);

?>

Результатом работы скрипта будет:

Array
(
    [0] => Ssl_cipher
    [Variable_name] => Ssl_cipher
    [1] => DHE-RSA-AES256-SHA
    [Value] => DHE-RSA-AES256-SHA
)

[править] PHP 5

Поддерживается в ограниченном режиме, только в случае драйвера mysqlnd или внешней библиотеки начиная с версии 5.5 (см. вывод функции phpinfo).

[править] Python

На примере использования модуля mysqlclient. Также потребуется удостоверяющий сертификат:

$ wget https://www.1gb.ua/1gbuarootCA.crt
$ python
Python 3.7.0 (default, Sep 14 2018, 13:53:54)
[GCC 4.9.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> ssl = {'ca': 'in-solve-2016.crt'}
>>> db = MySQLdb.connect(host='адрес_сервера_бд', user='пользователь_бд', passwd='пароль_бд', ssl=ssl)
>>> cursor = db.cursor()
>>> cursor.execute("SHOW STATUS LIKE 'Ssl_cipher'")
>>> data = cursor.fetchone()
>>> print (data);
('Ssl_cipher', 'DHE-RSA-AES256-SHA')

[править] Ruby

С использованием модуля mysql2

$ wget https://www.1gb.ua/1gbuarootCA.crt
#!/usr/bin/env ruby
require "mysql2"

connect = Mysql2::Client.new(:host => 'адрес_сервера_бд',
                             :username => 'пользователь_бд',
                             :password => 'пароль_бд',
                             :database => 'имя_бд',
                             :sslca => 'in-solve-2016.crt')
result = connect.query("SHOW STATUS LIKE 'Ssl_cipher'")
result.each { |x| puts x }

Результат работы

{"Variable_name"=>"Ssl_cipher", "Value"=>"DHE-RSA-AES256-SHA"}
Личные инструменты