Nachdem ich ein selbstsigniertes SSL-Zertifikat erstellt habe, habe ich meinen Remote-MySQL-Server so konfiguriert, dass er diese verwendet (und SSL ist aktiviert).
Ich stelle eine SSH-Verbindung zu meinem Remote-Server her und versuche, über SSL eine Verbindung zu seinem eigenen mysqld herzustellen (MySQL-Server ist 5.5.25).
mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Ok, ich erinnere mich, dass ich ein Problem mit der Verbindung zum selben Server über SSL gelesen habe. Also lade ich die Client-Schlüssel auf meine lokale Box herunter und teste von dort ...
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error
Es ist unklar, worauf sich dieser "SSL-Verbindungsfehler" bezieht, aber wenn ich den weglasse -ssl-ca
, kann ich eine Verbindung über SSL herstellen.
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)
Ich glaube jedoch, dass dies nur die Verbindung verschlüsselt und nicht die Gültigkeit des Zertifikats überprüft (was bedeutet, dass ich potenziell anfällig für Man-in-Middle-Angriffe wäre).
Die SSL-Zertifikate sind gültig (wenn auch selbst signiert) und enthalten keine Passphrase. Meine Frage ist also, was mache ich falsch? Wie kann ich mit einem selbstsignierten Zertifikat eine SSL-Verbindung herstellen?
MySQL Server Version 5.5.25 und der Server und die Clients sind CentOS 5.
Danke für jeden Rat
Bearbeiten : Beachten Sie, dass der Befehl in allen Fällen aus demselben Verzeichnis ausgegeben wird, in dem sich die SSL-Schlüssel befinden (daher kein absoluter Pfad).
Bearbeiten (als Antwort auf mgorven): Dies ca.cert
ist das Zertifikat der Zertifizierungsstelle, das mysql
mitteilen soll, dass meine Zertifizierungsstelle vertrauenswürdig ist.
Die Konfig von my.cnf
ist
[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key
Ich habe auch versucht hinzuzufügen ssl-cipher=DHE-RSA-AES256-SHA
, habe es aber seitdem entfernt, da es nicht geholfen hat.
ca.cert
? Ist es das selbstsignierte Zertifikat des Servers? Verwenden Sie Client-Zertifikate zur Authentifizierung? Bitte geben Sie die SSL-bezogene Konfiguration auf dem Server an.Antworten:
Ja, Sie haben Recht, dass
--ssl-ca
der Client das Serverzertifikat überhaupt nicht überprüft , wenn Sie es nicht angeben . Da dies ohne diese Option möglich ist, ist der wahrscheinlichste Grund für den Fehler, dass der Client dem Serverzertifikat nicht vertraut.Wenn Sie selbstsignierte Client- und Serverzertifikate
ca.cert
verwenden, sollte die Datei beide Dateien enthalten. Auf diese Weise vertraut der Client dem Serverzertifikat und der Server dem Clientzertifikat.Beispiel:
Generieren Sie den Serverschlüssel und das Zertifikat:
Generieren Sie den Client-Schlüssel und das Zertifikat:
Kombinieren Sie die Client- und Serverzertifikate in der CA-Zertifikatsdatei:
quelle
Um Einweg-SSL zu verwenden, sollten Sie Folgendes versuchen:
Die
--ssl-cert
und--ssl-key
auf dem MySQL-Client werden für 2-Wege-SSL verwendet. Dies bedeutet zertifikatsbasierte Authentifizierung. Der Betreff des Client-Zertifikats sollte der Benutzername sein.quelle
--ssl-verify-server-cert
des CN das Serverzertifikat mit dem Host identisch sein muss, den Sie für die Befehlszeilenoption -h angegeben haben.Haben Sie nicht zufällig denselben allgemeinen Namen für Server- und Client-Zertifikate eingegeben? Wenn ja, ersetzen Sie einen von ihnen, damit die allgemeinen Namen unterschiedlich sind.
quelle