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;
Pingback: blog.schaal-24.de: MySQL-Replikation mit ssl absichern | WordPress by koecse