Ich möchte, dass mein Webserver über eine SSL-Verbindung mit dem MySQL-Datenbankserver spricht. Auf dem Webserver läuft CentOS5, auf dem Datenbankserver läuft FreeBSD. Die Zertifikate werden von einer zwischengeschalteten CA DigiCert bereitgestellt.
MySQL sollte SSL verwenden, entsprechend my.cnf
:
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
ssl
ssl-capath = /opt/mysql/pki/CA
ssl-cert = /opt/mysql/pki/server-cert.pem
ssl-key = /opt/mysql/pki/server-key.pem
Wenn ich MySQL starte, startet der Daemon ohne Fehler. Dies deutet darauf hin, dass alle Zertifikatdateien lesbar sind.
Wenn ich jedoch versuche, eine Verbindung vom Webserver zum Datenbankserver herzustellen, erhalte ich eine Fehlermeldung:
[root@webserver ~]# mysql -h mysql.example.org -u user -p
ERROR 2026 (HY000): SSL connection error
Und wenn ich versuche, mit openssl weiter zu debuggen:
[root@webserver ~]# openssl s_client -connect mysql.example.org:3306 0>/dev/null
CONNECTED(00000003)
15706:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:588:
Ist dies eine gültige Methode zum Testen der SSL-Verbindung zu einem MySQL-Datenbankserver? Die SSL23_GET_SERVER_HELLO:unknown protocol
Meldung ist seltsam, da dies normalerweise der Fall ist, wenn Sie SSL an einem für Nicht-SSL-Datenverkehr bestimmten Port sprechen.
Dieser Befehl openssl funktioniert anscheinend auch mit LDAP- und HTTP-Servern:
$ openssl s_client -connect ldap.example.org:636 0>/dev/null
CONNECTED(00000003)
depth=2 /C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
...
$ openssl s_client -connect www.example.org:443 0>/dev/null
CONNECTED(00000003)
depth=0 /DC=org/DC=example/OU=Services/CN=www.example.org
Eine häufige Ursache für dieses Problem ist, dass der Common Name (CN) des CA-Zertifikats mit dem Server- und / oder Client-Zertifikat identisch ist.
Siehe hier: https://dev.mysql.com/doc/refman/5.6/de/creating-ssl-certs.html
Versuchen Sie, Ihre Zertifizierungsstelle und Zertifikate neu zu erstellen, und stellen Sie in allen Fällen sicher, dass Sie eine eindeutige CN verwenden.
quelle
Ich habe ein ähnliches Problem mit dem MacOS X-Client, der mit einem Ubuntu-Server kommuniziert.
Können Sie überprüfen, ob die Verbindung funktioniert, wenn Sie das clientseitige Zertifikat und den Clientschlüssel weglassen und nur die Zertifizierungsstelle für das Serverzertifikat haben? Können Sie eine verschlüsselte Verbindung herstellen? Dies erfordert normalerweise die Einstellung ANY für die Spalte ssl_type des zugeordneten Benutzers.
quelle
Ich wollte nur zur Erinnerung sagen, dass Sie, wenn Sie einen Load Balancer (wie F5 oder HAProxy) zwischen MySQL und dem Client verwenden möchten, Ihr SSL-Zertifikat vom Load Balancer in den MySQL-Server importieren möchten. Dies liegt am STARTTLS-ähnlichen Verbindungsstart.
quelle