Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Samouczek MySQL — konfiguracja i zarządzanie SSL na serwerze MySQL

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:

  1. 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.
  2. 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ą.
  3. 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 -u -p

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 -u  -p –ssl-mode=WYŁĄCZONE

 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:

  1.  Usuń certyfikat *.pem i pliki kluczy z katalogu danych MySQL.
  2. 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:

  1. 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ą.
  2.  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 -u sgroot -p –ssl-mode=WYŁĄCZONE

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Jak przestawić kolumny na wiersze?

  2. Jak działa funkcja TRIM() w MySQL

  3. Mysql::Błąd:Podany klucz był za długi; maksymalna długość klucza to 1000 bajtów

  4. Uzyskaj rekordy z najwyższym/najmniejszym <cokolwiek> na grupę

  5. MySQL Workbench:Błąd w zapytaniu (1064):Błąd składni w pobliżu „VISIBLE” w wierszu 1