V tomto příspěvku na blogu se podíváme na některé důležité aspekty konfigurace a správy SSL v hostingu MySQL. Ty by zahrnovaly výchozí konfiguraci, deaktivaci SSL a povolení a vynucení SSL na serveru MySQL. Naše pozorování jsou založena na komunitní verzi MySQL 5.7.21.
Výchozí konfigurace SSL v MySQL
Ve výchozím nastavení server MySQL vždy nainstaluje a povolí konfiguraci SSL. Není však vynuceno, aby se klienti připojovali pomocí SSL. Klienti si mohou vybrat připojení s nebo bez SSL, protože server umožňuje oba typy připojení. Podívejme se, jak ověřit toto výchozí chování serveru MySQL.
Když je na serveru MySQL ve výchozím nastavení nainstalováno a povoleno SSL, obvykle se zobrazí následující:
- Přítomnost souborů *.pem v datovém adresáři MySQL. Toto jsou různé klientské a serverové certifikáty a klíče, které se používají pro SSL, jak je popsáno zde.
- Během spouštění serveru bude v souboru protokolu chyb mysqld poznámka, například:
- [Poznámka] Nalezeno ca.pem, server-cert.pem a server-key.pem v datovém adresáři. Pokouším se pomocí nich povolit podporu SSL.
- Hodnota proměnné ‘have_ssl’ bude ANO:
mysql> zobrazí proměnné jako ‘have_ssl’;
+—————+——-+
| Název_proměnné | Hodnota |
+—————+——-+
| have_ssl | ANO |
+—————+——-+
Pokud jde o klienta MySQL, ve výchozím nastavení se vždy snaží přejít k šifrovanému síťovému připojení se serverem, a pokud to selže, přejde zpět do nešifrovaného režimu.
Takže připojením k serveru MySQL pomocí příkazu:
mysql -h
Můžeme zkontrolovat, zda je aktuální připojení klienta zašifrováno nebo ne pomocí příkazu status:
stav mysql>
————–
mysql Ver 14.14 Distrib 5.7.21, pro Linux (x86_64) pomocí EditLine wrapper
ID připojení: 75
Aktuální databáze:
Aktuální uživatel: [email protected]
SSL: Použitá šifra je DHE-RSA-AES256-SHA
Aktuální pager: stdout
Použití výstupního souboru: ”
Použití oddělovače: ;
Verze serveru: 5.7.21-log MySQL Community Server (GPL)
Verze protokolu: 10
Připojení: 127.0.0.1 přes TCP/IP
…………………………..
Pole SSL zvýrazněné výše znamená, že připojení je šifrováno. Můžeme však požádat klienta MySQL, aby se připojil bez SSL pomocí příkazu:
mysql -h
stav mysql>
————–
ID připojení: 93
Aktuální databáze:
Aktuální uživatel: [email protected]
SSL: Nepoužívá se
Aktuální pager: stdout
Použití výstupního souboru: ”
Použití oddělovače: ;
Verze serveru: 5.7.21-log MySQL Community Server (GPL)
Verze protokolu: 10
Připojení: 127.0.0.1 přes TCP/IP
…………………………………
Vidíme, že i když je na serveru povoleno SSL, můžeme se k němu připojit bez SSL.
Výukový program MySQL – Jak konfigurovat a spravovat SSL na vašem #MySQL ServerClick To Tweet
Zakázání SSL v MySQL
Pokud je vaším požadavkem úplné vypnutí SSL na serveru MySQL namísto výchozí možnosti ‚povolený, ale volitelný režim‘, můžeme provést následující:
- Smažte certifikát *.pem a soubory klíčů v datovém adresáři MySQL.
- Spusťte MySQL s vypnutou možností SSL. To lze provést přidáním položky řádku:
ssl=0 v souboru my.cnf.
Můžeme pozorovat, že:
- V protokolech mysqld NEBUDE žádná poznámka, například:
- [Poznámka] Nalezeno ca.pem, server-cert.pem a server-key.pem v datovém adresáři. Pokouším se pomocí nich povolit podporu SSL.
- Hodnota proměnné ‘have_ssl’ bude ZAKÁZÁNA:
mysql> zobrazí proměnné jako ‘have_ssl’;
+—————+——-+
| Název_proměnné | Hodnota |
+—————+——-+
| have_ssl | VYPNUTO |
+—————+——-+
Vynucení SSL v MySQL
Viděli jsme, že ačkoliv bylo SSL ve výchozím nastavení na serveru MySQL povoleno, nebylo vynuceno a stále jsme se mohli připojit bez SSL.
Nyní, nastavením systémové proměnné require_secure_transport, budeme moci vynutit, aby server akceptoval pouze připojení SSL. To lze ověřit pokusem o připojení k serveru MySQL pomocí příkazu:
mysql -h
A vidíme, že připojení by bylo odmítnuto s následující chybovou zprávou ze serveru:
CHYBA 3159 (HY000):Připojení využívající nezabezpečený přenos jsou zakázána, pokud –require_secure_transport=ON.
Úvahy o SSL pro replikační kanály
Ve výchozím nastavení se v nastavení replikace MySQL podřízené jednotky připojují k master bez šifrování.
Pro bezpečné připojení k hlavnímu serveru pro replikační provoz musí podřízené jednotky používat MASTER_SSL=1; jako součást „CHANGE MASTER TO“ příkaz, který specifikuje parametry pro připojení k masteru. Upozorňujeme, že tato možnost je také povinná v případě, že je váš hlavní server nakonfigurován k vynucení připojení SSL pomocí require_secure_transport.