MySQL-Replikation mit ssl absichern 1


Um die Replikation über ssl abzusichern, muss mysql ssl unterstützen.

mysql -u root -p
show variables like '%ssl%';

Wenn das Ergebnis so aussieht, ist ssl noch nicht konfiguriert.

have_openssl DISABLED
have_ssl DISABLED
ssl_ca
ssl_capath
ssl_cert
ssl_cipher
ssl_key

Zunächst wird auf beiden Servern das Verzeichnis für die ssl-keys angelegt.

mkdir -p /etc/mysql/ssl
chown mysql.mysql /etc/mysql/ssl
chmod 750 /etc/mysql/ssl

Danach werden die Zertifikate auf einem Server erstellt. Für server1 und server2 können beliebige Namen verwendet werden.


cd /etc/mysql/ssl

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 1095 -key ca-key.pem -out ca-cert.pem

openssl req -newkey rsa:2048 -days 1095 -nodes -keyout server1-key.pem -out server1-req.pem
openssl rsa -in server1-key.pem -out server1-key.pem
openssl x509 -req -in server1-req.pem -days 1095 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server1-cert.pem

openssl req -newkey rsa:2048 -days 1095 -nodes -keyout server2-key.pem -out server2-req.pem
openssl rsa -in server2-key.pem -out server2-key.pem
openssl x509 -req -in server2-req.pem -days 1095 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server2-cert.pem

Die folgenden Dateien werden auf den zweiten Server nach /etc/mysql/ssl kopiert:

ca-cert.pem
ca-key.pem
server2*

wobei server2* auf Server1 nicht benötigt werden.

Die my.cnf muss entsprechend angepasst werden. Statt server1 ggf. den Dateinamen für den jeweiligen Server verwenden.

[client]
ssl
ssl-cipher=DHE-RSA-AES256-SHA
ssl-ca=/etc/mysql/ssl/ca-cert.pem

[mysqld]
ssl
ssl-cipher=DHE-RSA-AES256-SHA
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server1-cert.pem
ssl-key=/etc/mysql/ssl/server1-key.pem

Nach einem Neustart des mysqld zeigt show variables like '%ssl%';,

have_openssl YES
have_ssl YES
ssl_ca /etc/mysql/ssl/ca-cert.pem
ssl_cert /etc/mysql/ssl/server1-cert.pem
ssl_cipher DHE-RSA-AES256-SHA
ssl_key /etc/mysql/ssl/server1-key.pem

Um jetzt die Replikation über ssl laufen zu lassen, muss auf beiden Servern
STOP SLAVE;
CHANGE MASTER TO MASTER_SSL=1, MASTER_SSL_CA = '/etc/mysql/ssl/ca-cert.pem', MASTER_SSL_CIPHER='DHE-RSA-AES256-SHA';
START SLAVE;

ausgeführt werden.

SHOW SLAVE STATUS \G zeigt dann u.a.

Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql/ssl/ca-cert.pem
Master_SSL_Cipher: DHE-RSA-AES256-SHA

Man kann auch eine Verbindung für den Repliaktion-slave über ssl erzwingen:
GRANT USAGE ON *.* TO 'rep_user'@'%' REQUIRE SSL;
flush privileges;


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Ein Gedanke zu “MySQL-Replikation mit ssl absichern