MySQL für SSL konfiguriert, aber SSL ist immer noch deaktiviert ..!

9

Ich habe SSL für MySQL mit dem folgenden Skript konfiguriert.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

Die folgenden Dateien wurden erstellt:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Dann habe ich server-cert.pem und client-cert.pem zu ca.pem kombiniert (ich habe dazu einen Beitrag gelesen ..)

Ich habe einen SSL-Benutzer in MySQL erstellt:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Als nächstes habe ich folgendes in my.cnf hinzugefügt

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

Nach dem Neustart des Servers stellte ich eine Verbindung zu MySQL her, aber SSL wurde immer noch nicht verwendet :(

mysql -u ssluser -p

SSL:                    Not in use

Sogar der Parameter have_ssl wurde immer noch deaktiviert angezeigt .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

Habe ich einen Schritt verpasst oder was ist falsch ..

Antworten mit fehlenden Schritten im Detail werden sehr geschätzt.

Sonnenstrahlen
quelle
Welche OpenSSL-Version verwenden Sie? Und bitte aktivieren Sie die Fehler- und Warnprotokollierung in MySQL. Wenn die Fehlermeldung "Privater Schlüssel kann nicht gelesen werden" angezeigt wird, ist dieser Fehler wahrscheinlich auf irgendeine Weise aufgetreten . Das Erstellen neuer Schlüssel + Zertifikate auf einem älteren System und deren Verwendung auf einem aktuellen MySQL hat das Problem für mich gelöst.
Gertvdijk
@gertvdijk Ich habe openssl-1.0.1c verwendet. Ich überprüfe die Protokolle auf den genannten Fehler.
Sunrays
Als erstes. Überprüfen Sie, ob MySQL SSL unterstützt. mysql --ssl --helpVergessen Sie auch nicht, MySQL neu zu starten, nachdem Sie diese Änderungen an my.cnf vorgenommen haben
Valentin Bajrami
1
@ val0x00ff yes MySQL unterstützt ssl, wenn der Wert have_ssl deaktiviert ist.
Sunrays
Versuchen Sie mysql --ssl -u ssluser -p, SSL auf dem Client zu erzwingen. Danach kann man herausfinden, warum REQuIRE SSL dies nicht tut.
Johannes

Antworten:

6

Die Lösung finden Sie hier: /ubuntu/194074/enabling-ssl-in-mysql

Sie müssen Zertifikate in das alte Format konvertieren:

openssl rsa -in client-key.pem -out client-key.pem
openssl rsa -in server-key.pem -out server-key.pem
Pavel Bernshtam
quelle
3

Versuchen Sie dies zu überprüfen:

  • Aktivieren Sie die Warnungsausgabeprotokollierung von MySQL und lesen Sie die tatsächlichen Protokolleinträge.
  • Überprüfen Sie die Dateisystemberechtigungen, damit der Benutzer, unter dem MySQL ausgeführt wird ( mysql?), Die Dateien lesen kann. In /rootIch glaube nicht , es hat in der Standardeinstellung.
  • Verhindert Apparmor oder SELinux, dass MySQL die Zertifikate und Schlüssel liest?
  • Möglicherweise werden Sie von einem bösen Fehler einer kürzlich aufgetretenen Inkompatibilität zwischen OpenSSL und MySQL getroffen. Ich konnte unter Ubuntu 12.04 keine Schlüssel generieren, die MySQL lesen konnte, während die Schlüssel, die ich unter Debian Squeeze generiere, einwandfrei funktionieren.
gertvdijk
quelle
2

Unter Ubuntu können Sie überprüfen, ob der apparmorZugriff auf Ihre Zertifizierungsdateien blockiert ist ( siehe Handbuch) .

Anschließend sollten Sie die Dateiberechtigungen / -eigentümer überprüfen und die erforderlichen Rechte hinzufügen /etc/apparmor.d/usr.sbin.mysqld. Siehe diesen Thread .

Franc Drobnič
quelle
2

Ich hatte dieses Problem und es half, den Besitz der PEM-Dateien zu ändern:

chown mysql.mysql /var/lib/mysql/*.pem  (or in your case /root/abc/ssl_certs/*.pem)

(Von Craig Wright - /ubuntu/194074/enabling-ssl-in-mysql )

BTB
quelle
Dies löste das Problem für mich.
Anteatersa
0

Fügen Sie die "ssl" in den [mysqld]Abschnitt in der my.cnfDatei wie

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

und dann MySQL neu starten und erneut überprüfen. Es wird klappen.

Pratik
quelle
0

Ich glaube, dieses Problem ist darauf zurückzuführen, dass Sie die Dateipfade für Ihr CA-Zertifikat, Ihren Serverschlüssel und Ihr Serverzertifikat nicht korrekt angegeben haben. Es muss im folgenden Format vorliegen ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

Das heißt, Sie benötigen den FULL FILE PATH der Zertifikate und Schlüssel in Ihrem MySQL-Installationsordner, keinen relativen '/ root /' Pfad.

Hier ist ein Beispiel aus meiner Installation:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Weitere Informationen finden Sie unter dem folgenden Link. https://dev.mysql.com/doc/connector-net/de/connector-net-tutorials-ssl.html

Josh
quelle
Seine Pfade beginnen mit a /, was bedeutet, dass es sich um vollständige Pfade handelt, nicht um relative Pfade. /root/ist der Home-Ordner für den Root-Benutzer auf einem Unix-System.
Bobpaul