Ich habe Percona MySQL 5.7 ( 5.7.21-20-log) installiert apt-get
, wenn ich es mit dem Root-Konto verbinde und den SSL-Status überprüfe
# mysql --ssl
mysql> show variables like '%ssl%';
+---------------+-----------------+
| 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 |
+---------------+-----------------+
mysql> status
--------------
mysql Ver 14.14 Distrib 5.7.21-20, for debian-linux-gnu (x86_64) using 6.3
Connection id: 31
Current database:
Current user: root@localhost
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Standardmäßig wird also SSL verwendet. Wenn ich jedoch den vollständigen Befehl verwende
mysql -h 127.0.0.1 -P 3306 -u root -p --ssl-ca=/var/lib/mysql/ca.pem --ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem
Es gibt einen Fehler zurück
ERROR 2026 (HY000): SSL connection error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
Antwort1
Ihr Problem liegt in der Verwendung des Serverzertifikats und -schlüssels auf der Clientseite.
--ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem
Wie dokumentiert in6.4.2 Kommandooptionen für verschlüsselte Verbindungen(Hervorhebung von mir):
--ssl-cert=file_name
Der Pfadname der SSL-Public-Key-Zertifikatdatei im PEM-Format.Auf der Clientseite ist dies das öffentliche Schlüsselzertifikat des Clients. Auf der Serverseite ist dies das öffentliche Schlüsselzertifikat des Servers. Auf der Serverseite impliziert diese Option
--ssl
.--ssl-key=file_name
Der Pfadname der SSL-Privatschlüsseldatei im PEM-Format. Auf der Clientseite ist dies derprivater Client-Schlüssel. Auf der Serverseite ist dies der private Schlüssel des Servers. Auf der Serverseite impliziert diese Option
--ssl
.
Sie können die TLS-Verbindung allein durch erzwingen --ssl
:
mysql -h 127.0.0.1 -P 3306 -u root -p --ssl
Nützlich könnte hier auch das sein --ssl-cipher=cipher_list
. Damit können Sie sicherstellen, dass die Verbindung keine unerwünschte Verschlüsselung verwendet, auch wenn dies in der Serverkonfiguration erlaubt ist. Wenn Sie jedoch über beides verfügen, sollte dies primär auf der Serverseite konfiguriert werden.