MySQL 5.7--------Best Practice für SSL-Verbindung
1. Hintergrund
* In einer Produktionsumgebung ist Sicherheit immer ein nicht zu vernachlässigendes Thema, und die Datenbanksicherheit hat höchste Priorität, da alle Daten in der Datenbank gespeichert werden
* Wann Bei Verwendung einer unverschlüsselten Methode zur Verbindung mit der MySQL-Datenbank liegen alle im Netzwerk übertragenen Informationen im Klartext vor und können von jedem im Netzwerk abgefangen werden, wodurch möglicherweise vertrauliche Informationen verloren gehen. Bei der Übertragung vertraulicher Informationen (z. B. Passwörter) können Sie eine SSL-Verbindung verwenden.
* Wenn die -Version kleiner als 5.7.6 ist, folgen Sie der Methode MySQL 5.6 SSL-Konfiguration .
2. MySQL-Verbindungsmethode
* Steckdosenanschluss
* TCP-Nicht-SSL-Verbindung
* SSL-sichere Verbindung
* SSL + Passwort-Verbindung [Version > MySQL 5.7.5]
* SSL + Passwort + Schlüsselverbindung
3. Einführung in SSL
* SSL bezieht sich auf SSL/TLS, was ein An Verschlüsselungsprotokoll für sichere Kommunikation in Computernetzwerken. Unter der Annahme, dass die Übertragung des Benutzers nicht über SSL erfolgt, wird sie im Klartext im Netzwerk übertragen, was Menschen mit Hintergedanken Möglichkeiten bietet. Daher ist SSL mittlerweile auf vielen Websites standardmäßig aktiviert, beispielsweise auf Facebook, Twitter, YouTube, Taobao usw.
4. Umgebung [SeLinux ausschalten]
* Systemumgebung
[root@MySQL ~]
# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@MySQL ~]
# uname -r
2.6.32-696.3.2.el6.x86_64
[root@MySQL ~]
# getenforce
Disabled
* MySQL-Umgebung [MySQL 5.7-Installation Details wurden im vorherigen Kapitel vorgestellt]
Die Werte von have_openssl und have_ssl sind beide DEAKTIVIERT, was darauf hinweist SSL ist nicht aktiviert
[root@MySQL ~]
# mysql -p'123'
mysql: [Warning] Using a password on the
command
line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection
id
is 6
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and
/or
its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and
/or
its
affiliates. Other names may be trademarks of their respective
owners.
Type
'help;'
or
'h'
for
help. Type
'c'
to
clear
the current input statement.
mysql>
select
version();
+-----------+
| version() |
+-----------+
| 5.7.18 |
+-----------+
1 row
in
set
(0.00 sec)
mysql> show variables like
'have%ssl%'
;
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
+---------------+----------+
2 rows
in
set
(0.02 sec)
mysql> show variables like
'port'
;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row
in
set
(0.01 sec)
mysql> show variables like
'datadir'
;
+---------------+-------------------+
| Variable_name | Value |
+---------------+-------------------+
| datadir |
/data/mysql_data/
|
+---------------+-------------------+
1 row
in
set
(0.01 sec)
5. SSL-Konfiguration
* Verwenden Sie das integrierte Tool, um SSL zu generieren verwandte Dateien
[root@MySQL ~]
# /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql_data
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'
-----
[root@MySQL ~]
# ls -l /data/mysql_data/*.pem
-rw------- 1 root root 1679 Jun 24 20:54
/data/mysql_data/ca-key
.pem
-rw-r--r-- 1 root root 1074 Jun 24 20:54
/data/mysql_data/ca
.pem
-rw-r--r-- 1 root root 1078 Jun 24 20:54
/data/mysql_data/client-cert
.pem
-rw------- 1 root root 1675 Jun 24 20:54
/data/mysql_data/client-key
.pem
-rw------- 1 root root 1675 Jun 24 20:54
/data/mysql_data/private_key
.pem
-rw-r--r-- 1 root root 451 Jun 24 20:54
/data/mysql_data/public_key
.pem
-rw-r--r-- 1 root root 1078 Jun 24 20:54
/data/mysql_data/server-cert
.pem
-rw------- 1 root root 1675 Jun 24 20:54
/data/mysql_data/server-key
.pem
[root@MySQL ~]
# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
Die Werte von have_openssl und have_ssl sind beide JA, was darauf hinweist, dass SSL erfolgreich geöffnet wurde
mysql> show variables like
'have%ssl%'
;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | YES |
| have_ssl | YES |
+---------------+-------+
2 rows
in
set
(0.03 sec)
6. SSL + Passwort-Verbindungstest
* Erstellen Sie einen Benutzer und geben Sie eine SSL-Verbindung an [ Nach MySQL 5.7 wird empfohlen, die Methode „Benutzer erstellen“ zum Erstellen eines Benutzers zu verwenden ]
mysql> create user
'ssl_test'
@
'%'
identified by
'123'
require SSL;
Query OK, 0 rows affected (0.00 sec)
[root@MySQL ~]
# mysql -h 192.168.60.129 -ussl_test -p'123' --ssl=0
mysql: [Warning] Using a password on the
command
line interface can be insecure.
ERROR 1045 (28000): Access denied
for
user
'ssl_test'
@
'192.168.60.129'
(using password: YES)
SSL: Die verwendete Verschlüsselung ist DHE-RSA-AES256-SHA, was eine Verbindung über SSL bedeutet
[root@MySQL ~]
# mysql -h 192.168.60.129 -ussl_test -p'123' --ssl
mysql: [Warning] Using a password on the
command
line interface can be insecure.
WARNING: --ssl is deprecated and will be removed
in
a future version. Use --ssl-mode instead.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection
id
is 12
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and
/or
its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and
/or
its
affiliates. Other names may be trademarks of their respective
owners.
Type
'help;'
or
'h'
for
help. Type
'c'
to
clear
the current input statement.
mysql> s
--------------
mysql Ver 14.14 Distrib 5.7.18,
for
linux-glibc2.5 (x86_64) using EditLine wrapper
Connection
id
: 12
Current database:
Current user: ssl_test@192.168.60.129
SSL: Cipher
in
use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile:
''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: 192.168.60.129 via TCP
/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 7 min 34 sec
Threads: 1 Questions: 29 Slow queries: 0 Opens: 112 Flush tables: 1 Open tables: 105 Queries per second avg: 0.063
--------------
7 . SSL + Passwort + Schlüsselverbindung
* Benutzer erstellen und X509 [SSL+Passwort] angeben Schlüssel] Verbinden [ Nach MySQL 5.7 wird empfohlen, die Methode „Benutzer erstellen“ zum Erstellen von Benutzern zu verwenden ]
mysql> create user
'X509_test'
@
'%'
identified by
'123'
require X509;
Query OK, 0 rows affected (0.00 sec)
[root@MySQL ~]
# mysql -h 192.168.60.129 -uX509_test -p'123' --ssl=0
mysql: [Warning] Using a password on the
command
🎜>line interface can be insecure.
ERROR 1045 (28000): Access denied
for
user
'X509_test'
[root@MySQL ~]
# mysql -h 192.168.60.129 -uX509_test -p'123' --ssl
mysql: [Warning] Using a password on the
command
line interface can be insecure.
ERROR 1045 (28000): Access denied
for
user
'X509_test'
@
'192.168.60.129'
(using password: YES)
SSL: Die verwendete Verschlüsselung ist DHE-RSA-AES256-SHA, was bedeutet, dass die Verbindung über SSL erfolgt
[root@MySQL ~]
# mysql -h 192.168.60.129 -uX509_test -p'123' --ssl-cert=/data/mysql_data/client-cert.pem --ssl-key=/data/mysql_data/client-key.pem
mysql: [Warning] Using a password on the
command
line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection
id
is 21
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and
/or
its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and
/or
its
affiliates. Other names may be trademarks of their respective
owners.
Type
'help;'
or
'h'
for
help. Type
'c'
to
clear
the current input statement.
mysql> s
--------------
mysql Ver 14.14 Distrib 5.7.18,
for
linux-glibc2.5 (x86_64) using EditLine wrapper
Connection
id
: 21
Current database:
Current user: X509_test@192.168.60.129
SSL: Cipher
in
use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile:
''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: 192.168.60.129 via TCP
/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 18 min 27 sec
Threads: 1 Questions: 40 Slow queries: 0 Opens: 118 Flush tables: 1 Open tables: 111 Queries per second avg: 0.036
--------------
Das obige ist der detaillierte Inhalt vonBeispiel-Tutorial einer SSL-Verbindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!