W tym poście na blogu omawiamy niektóre z ważnych aspektów konfiguracji i zarządzania SSL w hostingu MySQL. Obejmują one domyślną konfigurację, wyłączenie SSL oraz włączenie i wymuszenie SSL na serwerze MySQL. Nasze obserwacje oparte są na społecznościowej wersji MySQL 5.7.21.
Domyślna konfiguracja SSL w MySQL
Domyślnie serwer MySQL zawsze instaluje i włącza konfigurację SSL. Jednak nie jest wymuszane, aby klienci łączyli się za pomocą protokołu SSL. Klienci mogą wybrać połączenie z SSL lub bez, ponieważ serwer zezwala na oba typy połączeń. Zobaczmy, jak zweryfikować to domyślne zachowanie serwera MySQL.
Gdy SSL jest domyślnie zainstalowany i włączony na serwerze MySQL, zazwyczaj zobaczymy:
- Obecność plików *.pem w katalogu danych MySQL. Są to różne certyfikaty i klucze klienta i serwera, które są używane przez SSL, jak opisano tutaj.
- W pliku dziennika błędów mysqld podczas uruchamiania serwera pojawi się uwaga, taka jak:
- [Uwaga] Znaleziono ca.pem, server-cert.pem i server-key.pem w katalogu danych. Próbuję włączyć obsługę SSL za ich pomocą.
- Wartość zmiennej „have_ssl” będzie TAK:
mysql> pokaż zmienne, takie jak „have_ssl”;
+—————+——-+
| Nazwa zmiennej | Wartość |
+—————+——-+
| have_ssl | TAK |
+—————+——-+
W odniesieniu do klienta MySQL, domyślnie zawsze próbuje nawiązać szyfrowane połączenie sieciowe z serwerem, a jeśli to się nie powiedzie, wraca do trybu nieszyfrowanego.
Tak więc, łącząc się z serwerem MySQL za pomocą polecenia:
mysql -h
Możemy sprawdzić, czy bieżące połączenie klienta jest szyfrowane, czy nie za pomocą polecenia status:
mysql> status
————–
mysql wersja 14.14 Distrib 5.7.21 dla systemu Linux (x86_64) przy użyciu opakowania EditLine
Identyfikator połączenia: 75
Aktualna baza danych:
Bieżący użytkownik: [email protected]
SSL: Używany szyfr to DHE-RSA-AES256-SHA
Bieżący pager: stdout
Korzystanie z pliku wyjściowego: ”
Używając separatora: ;
Wersja serwera: 5.7.21-log MySQL Community Server (GPL)
Wersja protokołu: 10
Połączenie: 127.0.0.1 przez TCP/IP
…………………………..
Wyróżnione powyżej pole SSL wskazuje, że połączenie jest szyfrowane. Możemy jednak poprosić klienta MySQL o połączenie bez SSL za pomocą polecenia:
mysql -h
mysql> stan
————–
Identyfikator połączenia: 93
Aktualna baza danych:
Bieżący użytkownik: [email protected]
SSL: Nieużywane
Bieżący pager: stdout
Korzystanie z pliku wyjściowego: ”
Używając separatora: ;
Wersja serwera: 5.7.21-log MySQL Community Server (GPL)
Wersja protokołu: 10
Połączenie: 127.0.0.1 przez TCP/IP
………………………………
Widzimy, że chociaż SSL jest włączony na serwerze, jesteśmy w stanie połączyć się z nim bez SSL.
Samouczek MySQL — Jak skonfigurować i zarządzać SSL na serwerze #MySQLKliknij, aby tweetować
Wyłączanie SSL w MySQL
Jeśli Twoim wymaganiem jest całkowite wyłączenie SSL na serwerze MySQL zamiast domyślnej opcji „włączony, ale opcjonalny tryb”, możemy wykonać następujące czynności:
- Usuń certyfikat *.pem i pliki kluczy z katalogu danych MySQL.
- Uruchom MySQL z wyłączoną opcją SSL. Można to zrobić, dodając wpis linii:
ssl=0 w pliku my.cnf.
Możemy zaobserwować, że:
- NIE będzie żadnych notatek w logach mysqld, takich jak :
- [Uwaga] Znaleziono ca.pem, server-cert.pem i server-key.pem w katalogu danych. Próbuję włączyć obsługę SSL za ich pomocą.
- Wartość zmiennej „have_ssl” będzie WYŁĄCZONA:
mysql> pokaż zmienne, takie jak „have_ssl”;
+—————+——-+
| Nazwa zmiennej | Wartość |
+—————+——-+
| have_ssl | WYŁĄCZONY |
+—————+——-+
Wymuszanie SSL w MySQL
Zauważyliśmy, że chociaż SSL był domyślnie włączony na serwerze MySQL, nie był on egzekwowany i nadal byliśmy w stanie połączyć się bez SSL.
Teraz, ustawiając zmienną systemową require_secure_transport, będziemy mogli wymusić, aby serwer akceptował tylko połączenia SSL. Można to zweryfikować, próbując połączyć się z serwerem MySQL za pomocą polecenia:
mysql -h
I widzimy, że połączenie zostanie odrzucone z następującym komunikatem o błędzie z serwera:
BŁĄD 3159 (HY000):Połączenia korzystające z transportu niezabezpieczonego są zabronione, gdy –require_secure_transport=ON.
Rozważania SSL dla kanałów replikacji
Domyślnie, w konfiguracji replikacji MySQL, urządzenia podrzędne łączą się z masterem bez szyfrowania.
Dlatego, aby połączyć się z masterem w bezpieczny sposób dla ruchu związanego z replikacją, slave musi używać MASTER_SSL=1; w ramach „ZMIANA MISTRZA NA” komenda określająca parametry połączenia z masterem. Należy pamiętać, że ta opcja jest również obowiązkowa w przypadku, gdy urządzenie główne jest skonfigurowane do wymuszania połączenia SSL przy użyciu required_secure_transport.