В тази публикация в блога разглеждаме някои от важните аспекти на конфигурирането и управлението на SSL в MySQL хостинг. Те включват конфигурацията по подразбиране, деактивиране на SSL и активиране и налагане на SSL на MySQL сървър. Нашите наблюдения се основават на общностната версия на MySQL 5.7.21.
Конфигурация на SSL по подразбиране в MySQL
По подразбиране MySQL сървърът винаги инсталира и активира SSL конфигурация. Въпреки това, не е наложено клиентите да се свързват чрез SSL. Клиентите могат да изберат да се свързват със или без SSL, тъй като сървърът позволява и двата типа връзки. Нека видим как да проверим това поведение по подразбиране на MySQL сървъра.
Когато SSL е инсталиран и активиран на MySQL сървъра по подразбиране, обикновено ще видим следното:
- Наличие на *.pem файлове в директорията с данни на MySQL. Това са различните клиентски и сървърни сертификати и ключове, които се използват за SSL, както е описано тук.
- В регистрационния файл на mysqld по време на стартирането на сървъра ще има бележка, като например:
- [Забележка] Намерени са ca.pem, server-cert.pem и server-key.pem в директорията с данни. Опитвам се да активирам поддръжката на SSL чрез тях.
- Стойността на променливата ‘have_ssl’ ще бъде ДА:
mysql> показва променливи като ‘have_ssl’;
+—————+——-+
| Име на променлива | Стойност |
+—————+——-+
| have_ssl | ДА |
+—————+——-+
По отношение на MySQL клиента по подразбиране той винаги се опитва да използва криптирана мрежова връзка със сървъра и ако това не успее, се връща обратно към нешифрован режим.
И така, като се свържете с MySQL сървър с помощта на командата:
mysql -h <име на хост> -u <потребителско име> -p
Можем да проверим дали текущата клиентска връзка е криптирана или не с помощта на командата status:
mysql> състояние
—————
mysql Версия 14.14 Distribut 5.7.21, за Linux (x86_64) с помощта на EditLine wrapper
Идент. № на връзката: 75
Текуща база данни:
Текущ потребител: [email protected]
SSL: Използваният шифър е DHE-RSA-AES256-SHA
Текущ пейджър: stdout
Използване на outfile: ”
Използване на разделител: ;
Версия на сървъра: 5.7.21-log MySQL Community Server (GPL)
Версия на протокола: 10
Връзка: 127.0.0.1 през TCP/IP
…………………………..
SSL полето, подчертано по-горе, показва, че връзката е криптирана. Можем обаче да помолим MySQL клиента да се свърже без SSL, като използваме командата:
mysql -h <име на хост> -u <потребителско име> -p –ssl-mode=ИЗКЛЮЧЕН
mysql> състояние
—————
Идент. № на връзката: 93
Текуща база данни:
Текущ потребител: [email protected]
SSL: Не се използва
Текущ пейджър: stdout
Използване на outfile: ”
Използване на разделител: ;
Версия на сървъра: 5.7.21-log MySQL Community Server (GPL)
Версия на протокола: 10
Връзка: 127.0.0.1 през TCP/IP
……………………………
Можем да видим, че въпреки че SSL е активиран на сървъра, можем да се свържем с него без SSL.
Урок за MySQL – Как да конфигурирате и управлявате SSL на вашия #MySQL сървър Щракнете, за да туитирате
Деактивиране на SSL в MySQL
Ако изискването ви е напълно да изключите SSL на MySQL сървъра вместо опцията по подразбиране „разрешен, но незадължителен режим“, можем да направим следното:
- Изтрийте сертификата *.pem и ключовите файлове в директорията с данни на MySQL.
- Стартирайте MySQL с изключена SSL опция. Това може да стане чрез добавяне на ред:
ssl=0 във файла my.cnf.
Можем да забележим, че:
- Няма да има бележки в регистрационните файлове на mysqld като:
- [Забележка] Намерени са ca.pem, server-cert.pem и server-key.pem в директорията с данни. Опитвам се да активирам поддръжката на SSL чрез тях.
- Стойността на променливата ‘have_ssl’ ще бъде ДЕАКТИВИРАНА:
mysql> показва променливи като ‘have_ssl’;
+—————+——-+
| Име на променлива | Стойност |
+—————+——-+
| have_ssl | ИЗКЛЮЧЕНО |
+—————+——-+
Прилагане на SSL в MySQL
Видяхме, че въпреки че SSL беше активиран по подразбиране на MySQL сървъра, той не беше наложен и все още успяхме да се свържем без SSL.
Сега, като зададем системната променлива require_secure_transport, ще можем да наложим този сървър да приема само SSL връзки. Това може да се провери, като се опитате да се свържете с MySQL сървър с командата:
mysql -h
И можем да видим, че връзката ще бъде отказана със следното съобщение за грешка от сървъра:
ГРЕШКА 3159 (HY000):Връзките, използващи несигурен транспорт, са забранени, докато –require_secure_transport=ON.
Съображения за SSL за канали за репликация
По подразбиране при настройка за репликация на MySQL подчинените се свързват към главния без криптиране.
Следователно, за да се свържат към главен сървър по сигурен начин за трафик на репликация, подчинените трябва да използват MASTER_SSL=1; като част от „CHANGE MASTER TO“ команда, която определя параметри за свързване към главния. Моля, имайте предвид, че тази опция е задължителна и в случай, че вашият главен обект е конфигуриран да налага SSL връзка чрез require_secure_transport.