V tomto dokumentu předpokládáme, že:
- jste již obdrželi svůj SSL certifikát,
- na svém serveru již máte nainstalovaný a nakonfigurovaný MySQL server.
V našem případě použijeme SSL certifikát vystavený pro doménu mysql.ssls.cz (za předpokladu, že se k MySQL serveru připojujeme přes doménu mysql.ssls.cz), přičemž:
- SSL certifikát máme uložený v souboru mysql.ssls.cz.crt,
- privátní klíč v souboru mysql.ssls.cz.key
- a certifikát podepisující certifikační autority (intermediate CA) v souboru ca_intermediate.crt.
Konfigurace MySQL serveru s SSL (TLS) certifikátem
-
Přihlaste se ke stroji, na němž běží MySQL server.
-
Nejprve se ujistíme, zda je již SSL na MySQL serveru povoleno. Připojte se k MySQL serveru pomocí MySQL klienta jako root uživatel a použijte:
mysql> SHOW GLOBAL VARIABLES LIKE '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ... | ... |
Zajímají nás pouze výše uvedené dva řádky. V tomto případě vidíme, že SSL není povolené.
-
Uložíme soubory s SSL certifikátem, intermediate certifikáty a privátním klíčem do adresáře /var/ssl/mysql a nastavíme k nim přístup:
chown -R mysql:mysql /var/ssl/mysql
-
V konfiguračním souboru MySQL serveru /etc/my.cnf v sekci pod [mysqld] nastavíme:
ssl-ca = /var/ssl/mysql/ca_intermediate.crt ssl-cert = /var/ssl/mysql/mysql.ssls.cz.crt ssl-key = /var/ssl/mysql/mysql.ssls.cz.key
-
Dále v konfiguračním souboru MySQL serveru /etc/my.cnf v sekci pod [mysqld] zakomentujeme skip_ssl:
#skip_ssl
-
A ještě v konfiguračním souboru MySQL serveru /etc/my.cnf v sekci pod [mysqld] povolíme require_secure_transport, aby bylo vyžadováno pouze zabezpečené (šifrované) spojení:
# Require clients to connect either using SSL # or through a local socket file require_secure_transport = ON
-
Restartujeme MySQL server:
service mysqld restart
-
Ověříme, zda je MySQL server nakonfigurován správně:
mysql -u root -p --ssl-mode=required
mysql> SHOW GLOBAL VARIABLES LIKE '%ssl%'; +---------------+------------------------------------+ | Variable_name | Value | +---------------+------------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /var/ssl/mysql/ca_intermediate.crt | | ssl_cert | /var/ssl/mysql/mysql.ssls.cz.crt | | ssl_key | /var/ssl/mysql/mysql.ssls.cz.key | | ... | ... |
-
Pro jistotu ověříme status MySQL serveru, kde na řádku SSL uvidíme konkrétní šifrovací sady:
mysql> STATUS --------------- mysql Ver X.X for Linux ... SSL: Cipher in use is DHE-RSA-AES256-SHA ...
Pokud SSL není funkční, tj. pokud se zobrazuje SSL: Not in use, vyhledejte příčinu v logu /var/log/mysqld.log
-
Nakonfigurujeme MySQL server, aby vyžadoval zabezpečené spojení:
mysql> UPDATE mysql.user SET ssl_type = 'ANY' WHERE user = 'gateway'; mysql> FLUSH PRIVILEGES;
-
Ukončete MySQL klienta a ověřte, zda MySQL server vyžaduje zabezpečené (šifrované) spojení pokusem o připojení nezabezpečeným spojením:
mysql -u gateway -p --ssl-mode=DISABLED