MySQL umożliwia użytkownikom bezpieczne łączenie się z bazami danych za pomocą certyfikatów SSL/TLS. W tym artykule przyjrzymy się konfiguracji MySQL SSL – jak włączyć SSL/TLS dla MySQL w Ubuntu.
Jak włączyć SSL/TLS dla MySQL
Oto kroki, aby skonfigurować połączenia SSL w MySQL.
1. Zainstaluj MySQL
Otwórz terminal i uruchom następujące polecenia, aby zainstalować MySQL.
$ sudo apt-get update $ sudo apt-get install mysql-client
Przeczytaj bonus:MySQL zmienia sortowanie wszystkich tabel
2. Sprawdź status SSL
Zaloguj się do MySQL jako root
$ mysql -uroot -p
Zostaniesz poproszony o hasło roota. Po zalogowaniu wpisz następujące polecenie, aby znaleźć aktualny stan SSL/TLS
mysql> SHOW VARIABLES LIKE '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | | +---------------+----------+
Przekonasz się, że have_openssl i have_ssl oba mają wartość WYŁĄCZONE. Oznacza to, że protokół SSL nie jest włączony w MySQL.
Przeczytaj bonus:Najlepsze blogi dotyczące baz danych do obserwowania
3. Generuj certyfikaty SSL/TLS
Następnie musimy wygenerować certyfikaty SSL/TLS i wskazać serwer MySQL do ich lokalizacji. Zazwyczaj ludzie używają openssl do generowania certyfikatów SSL, a następnie przenoszą je do /var/lib/mysql, która jest domyślną lokalizacją plików SSL dla serwera MySQL.
Jednak MySQL 5.7 i nowsze wersje są już dostarczane z narzędziem mysql_ssl_rsa_setup, które upraszcza ten proces. Generuje certyfikaty SSL i przechowuje je w /var/lib/mysql.
Ponieważ potrzebujemy procesu mysql, aby móc odczytać te pliki, utworzymy mysql jako właściciel tych plików, jak pokazano poniżej.
Uruchom następujące polecenie, aby wygenerować certyfikaty SSL
$ sudo mysql_ssl_rsa_setup --uid=mysqlGenerating a 2048 bit RSA private key ...................................+++ .....+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key ......+++ .................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key ......................................................+++ .................................................................................+++
writing new private key to 'client-key.pem'
-----
Możesz sprawdzić wygenerowane pliki, uruchamiając następujące polecenie
$ ls -all /var/lib/mysql/*.pem
Zobaczysz coś takiego
256740 4 -rw-r--r-- 1 mysql mysql 1078 May 1 12:24 /var/lib/mysql/server-cert.pem 256735 4 -rw------- 1 mysql mysql 1675 May 1 12:24 /var/lib/mysqlsql/ca-key.pem 256739 4 -rw-r--r-- 1 mysql mysql 451 May 1 12:24 /var/lib/mysqlsql/public_key.pem 256741 4 -rw------- 1 mysql mysql 1689 May 1 12:24 /var/lib/mysqlsql/client-key.pem 256737 4 -rw-r--r-- 1 mysql mysql 1064 May 1 12:24 /var/lib/mysqlsql/ca.pem 256743 4 -rw-r--r-- 1 mysql mysql 1048 May 1 12:24 /var/lib/mysqlsql/client-cert.pem 256736 4 -rw------- 1 mysql mysql 1625 May 1 12:24 /var/lib/mysqlsql/private_key.pem 256738 4 -rw------- 1 mysql mysql 1615 May 1 12:24 /var/lib/mysqlsql/server-key.pem
Są to plik certyfikatu SSL i pary kluczy prywatnych dla urzędu certyfikacji, serwera MySQL i klienta MySQL.
Przeczytaj bonus:Najlepsze alternatywy dla MySQL Workbench
4. Włącz połączenia SSL w MySQL Server
Następnie uruchom ponownie MySQL Server, aby włączyć SSL/TLS w MySQL.
$ sudo systemctl restart mysql
MySQL Server podczas uruchamiania automatycznie szuka plików certyfikatów SSL w /var/lib/mysql. Nie musisz więc ręcznie określać ich lokalizacji w pliku konfiguracyjnym MySQL.
Przeczytaj bonus:Jak włączyć pamięć podręczną zapytań MySQL
5. Sprawdź połączenie SSL
Zaloguj się do MySQL jak poprzednio (krok 2) i uruchom następujące polecenie.
SHOW VARIABLES LIKE '%ssl%'; Output +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | +---------------+-----------------+
Teraz znajdziesz have_openssl i have_ssl zmienne są TAK. Zobaczysz też, że ssl_ca , ssl_cert i ssl_key są wypełnione odpowiednimi wartościami.
Możesz również sprawdzić szczegóły połączenia.
mysql>\s
--------------
. . .
SSL: Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection: 127.0.0.1 via TCP/IP
. . .
--------------
6. Skonfiguruj SSL dla połączenia zdalnego (opcjonalnie)
Jeśli twój serwer MySQL ma zdalne połączenia przychodzące, możesz włączyć SSL dla połączeń zdalnych, a nawet uczynić go obowiązkowym, modyfikując plik konfiguracyjny serwera MySQL.
Otwórz terminal i uruchom następujące polecenie, aby otworzyć konfigurację MySQL.
$ sudo vi /etc/mysql/my.cnf
Dodaj blok kodu [mysqld], jak pokazano, poniżej dwóch instrukcji !includedir.
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON
bind-address = 0.0.0.0
W ostatniej linii ustawiliśmy bind-address na 0.0.0.0, aby umożliwić zdalne połączenia. Nie musisz go dodawać, jeśli masz już włączone połączenia zdalne.
Zrestartuj MySQL Server, aby zastosować zmiany. Od teraz MySQL będzie wymagał SSL.
W przypadku połączeń zdalnych nie zapomnij otworzyć portu 443 zamiast domyślnego 3306. Dzieje się tak, ponieważ połączenia SSL odbywają się przez port 443, a nie 3306.
Mamy nadzieję, że ten artykuł pomoże Ci włączyć połączenie SSL/TLS w MySQL.