sql >> Database >  >> RDS >> Mysql

SSL/TLS inschakelen voor MySQL in Ubuntu

Met MySQL kunnen gebruikers veilig verbinding maken met databases met behulp van SSL/TLS-certificaten. In dit artikel zullen we kijken naar MySQL SSL-configuratie - hoe SSL/TLS voor MySQL in Ubuntu in te schakelen.


SSL/TLS inschakelen voor MySQL

Hier zijn de stappen om SSL-verbindingen in MySQL in te stellen.


1. Installeer MySQL

Open terminal en voer de volgende opdrachten uit om MySQL te installeren.

$ sudo apt-get update
$ sudo apt-get install mysql-client

Bonus lezen:MySQL-sortering van alle tabellen wijzigen


2. SSL-status controleren

Log in op MySQL als root

$ mysql -uroot -p

U wordt gevraagd om het root-wachtwoord. Voer na het inloggen de volgende opdracht in om de huidige SSL/TLS-status te vinden

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       |          |
+---------------+----------+

U zult zien dat have_openssl en have_ssl beide hebben een UITGESCHAKELD waarde. Dit betekent dat SSL niet is ingeschakeld in MySQL.

Bonus lezen:Top databaseblogs om te volgen


3. Genereer SSL/TLS-certificaten

Vervolgens moeten we SSL/TLS-certificaten genereren en de MySQL-server naar hun locaties verwijzen. Gewoonlijk gebruiken mensen openssl om SSL-certificaten te genereren en deze vervolgens te verplaatsen naar /var/lib/mysql, de standaardlocatie van SSL-bestanden voor de MySQL-server.

MySQL 5.7 en latere versies worden echter al geleverd met een hulpprogramma mysql_ssl_rsa_setup om dit proces te vereenvoudigen. Het genereert SSL-certificaten en slaat ze op in /var/lib/mysql.

Omdat we het mysql-proces nodig hebben om deze bestanden te kunnen lezen, maken we mysql als de eigenaar van deze bestanden, zoals hieronder weergegeven.

Voer de volgende opdracht uit om SSL-certificaten te genereren

$ sudo mysql_ssl_rsa_setup --uid=mysql

Generating 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' 
-----

U kunt de gegenereerde bestanden controleren door de volgende opdracht uit te voeren

$ ls -all /var/lib/mysql/*.pem

Je ziet zoiets als het volgende

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

Dit zijn het SSL-certificaatbestand en de privésleutelparen voor de certificeringsinstantie, MySQL Server en MySQL-client.

Bonus Lezen:Top MySQL Workbench-alternatieven


4. SSL-verbindingen inschakelen in MySQL Server

Start vervolgens MySQL Server opnieuw om SSL/TLS in MySQL in te schakelen.

$ sudo systemctl restart mysql 

MySQL Server zoekt bij het opstarten automatisch naar SSL-certificaatbestanden in /var/lib/mysql. U hoeft dus niet handmatig hun locatie op te geven in het MySQL-configuratiebestand.

Bonus Lezen:MySQL Query Cache inschakelen


5. SSL-verbinding verifiëren

Log in op MySQL zoals eerder (stap 2) en voer de volgende opdracht uit.

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  |
+---------------+-----------------+

Nu vind je have_openssl en have_ssl variabelen zijn JA. Je zult ook zien dat ssl_ca , ssl_cert en ssl_key zijn gevuld met de juiste waarden.

U kunt ook uw verbindingsgegevens controleren.

mysql> \s

-------------- 
. . . 
SSL: Cipher in use is DHE-RSA-AES256-SHA 
. . . 
Connection: 127.0.0.1 via TCP/IP 
. . . 
--------------


6. SSL configureren voor externe verbinding (optioneel)

Als uw MySQL-server externe inkomende verbindingen heeft, kunt u SSL inschakelen voor externe verbindingen en dit zelfs verplicht stellen door het configuratiebestand van de MySQL-server te wijzigen.

Open terminal en voer de volgende opdracht uit om de MySQL-configuratie te openen.

$ sudo vi /etc/mysql/my.cnf

Voeg [mysqld] codeblok toe zoals getoond, onder de twee !includedir statements.

!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

In de laatste regel hebben we het bindadres ingesteld op 0.0.0.0 om externe verbindingen toe te staan. U hoeft het niet toe te voegen als u externe verbindingen al hebt ingeschakeld.

Start MySQL Server opnieuw om wijzigingen toe te passen. Vanaf nu vereist MySQL SSL.

Vergeet voor externe verbindingen niet om poort 443 te openen, in plaats van de standaard 3306. Dit komt omdat SSL-verbindingen plaatsvinden via poort 443 en niet via 3306.

Hopelijk helpt dit artikel je om de SSL/TLS-verbinding in MySQL in te schakelen.

  1. Eerste openbare preview van SQL Server 2019:CTP 2.0

  2. OpenVPN gebruiken om toegang tot uw databasecluster in de cloud te beveiligen

  3. Converteer 'smalldatetime' naar 'datetime2' in SQL Server (T-SQL-voorbeelden)

  4. Oracle-verklaring