Php mysql client ssl

MySQL и SSL

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

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

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

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

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

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

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

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

Читайте также:  Import numpy as np python ошибка

База данных в личном кабинете 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.ru, например

$ wget https://www.1gb.ru/in-solve-2016.crt $ mysql -s --ssl-ca=in-solve-2016.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 и выше

 $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.ru/in-solve-2016.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 = >>> 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

$ wget https://www.1gb.ru/in-solve-2016.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

"Ssl_cipher", "Value"=>"DHE-RSA-AES256-SHA">

Источник

niladri / mysql-connect-ssl.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

/* 127.0.0.1 will work if web server and mysql server are on same instance */
/* localhost did not work — details on stackoverflow */
$ ctx = mysqli_init();
$ ctx -> ssl_set ( ‘/etc/ssl/mysql/client-key.pem’ , ‘/etc/ssl/mysql/client-cert.pem’ , ‘/etc/ssl/mysql/ca.pem’ , NULL , NULL );
$ conn = $ ctx -> real_connect ( ‘127.0.0.1’ , ‘ssl_user’ , ‘password’ , ‘db’ , 3306 , null , MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT );
if (! $ conn )
die ( ‘Connect error (‘ . $ ctx -> connect_errno . ‘): ‘ . $ ctx -> connect_error . «\n»);
> else
$ query = » SELECT * FROM users «;
if ( $ result = $ ctx -> query ( $ query ))
$ rows = $ result -> fetch_array ();
print_r( $ rows );
> else
echo » Query failed «;
>
>
?>

Источник

How to use SSL in PHP Data Objects (PDO) mysql

If you want to connect securely to your MySQL database using PHP Data Objects (PDO), here is how to connect to MySQL with PHP PDO using an SSL encrypted connection.

 $servername = "db_hostname"; $username = "db_username"; $password = "db_password"; $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::MYSQL_ATTR_SSL_CA => '/path/to/cacert.pem', PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, ); try < $conn = new PDO("mysql:host=$servername;port=3306;dbname=db_name", $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()); $conn = null; > catch(PDOException $e) < echo "Connection failed: " . $e->getMessage(); > ?>Code language: PHP (php)

Please note that the above code should only work correctly on Windows Server, due to path to cacert.pem. See below. The PDO option MYSQL_ATTR_SSL_VERIFY_SERVER_CERT is important to disable checking of the server certificate. If omitted, you’ll receive an error: `SQLSTATE[HY000] [2002]`.

Cross-platform MYSQL_ATTR_SSL_CA usage in PHP

As you may know, in your Windows Server IIS PHP config, you need to set an openssl.cafile directive, providing the path to a Certificate Authority (CA) file. This is not necessary on Linux, where the system default is used. MYSQL_ATTR_SSL_CA needs this path on Windows, and may be omitted on Linux.

To add this logic into your PDO test script, add an extra variable with your OS information and change the MYSQL_ATTR_SSL_CA line:

$OS = ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ); PDO::MYSQL_ATTR_SSL_CA => $OS ? 'c:/path/to/cacert.pem' : '',Code language: PHP (php)

Your $options array becomes:

$OS = ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ); $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::MYSQL_ATTR_SSL_CA => $OS ? 'c:/path/to/cacert.pem' : '', PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, );Code language: PHP (php)

If $OS === true (e.g $OS === ‘WIN’ ) use c:/path/to/cacert.pem as PDO::MYSQL_ATTR_SSL_CA file path, else we’re on Linux and omit the path. This way you are sure you can use this PHP code cross-platform on both Windows Server and Linux!

Secure MySQL connections in WordPress with SSL/TLS

In WordPress you can define a MYSQL_CLIENT_FLAGS constant with MYSQLI_CLIENT_SSL as its value. This makes WordPress make SSL/TLS secured connections to your MySQL database.

Add to your wp-config.php file:

define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL );Code language: PHP (php)
  • Don’t turn off CURLOPT_SSL_VERIFYPEER, fix your PHP… Code base
  • How to send authenticated SMTP over a TLS encrypted… Code base
  • How to: Test MySQL database connectivity in ASP.NET, PHP,… Code base
  • Send authenticated SMTP email over TLS from WordPress WordPress
  • Convert PHP ext/mysql to MySQLi Code base
  • SSL in WordPress: how to move WordPress to HTTPS? The… WordPress

Share this post

Hi, my name is Jan. I am not a hacker, coder, developer or guru. I am merely an application manager / systems administrator, doing my daily thing at Embrace — The Human Cloud. In the past I worked for clidn and Vevida. With over 20 years of experience, my specialties include Windows Server, IIS, Linux (CentOS, Debian), security, PHP, websites & optimization. I blog at https://www.saotn.org.

UmbHost, the happy hosting company

UmbHost — The Happy Hosting company, eco-friendly and Umbraco hosting.

Some links on this website are affiliate links to external businesses that provide me with a small commission every time someone subscribes for that service.

Источник

MySQL и SSL

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

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

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

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

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

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

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

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

База данных в личном кабинете 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.ru, например

$ wget https://www.1gb.ru/in-solve-2016.crt $ mysql -s --ssl-ca=in-solve-2016.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 и выше

 $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.ru/in-solve-2016.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 = >>> 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

$ wget https://www.1gb.ru/in-solve-2016.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

"Ssl_cipher", "Value"=>"DHE-RSA-AES256-SHA">

Источник

Оцените статью