MySQL的主从复制默认是明文传送的,如果在生产环境中跨网络传送,数据的安全性就无法完全保证,为了解决这一问题,我们需要一种安全的方式进行传送,即基于SSL加密进行数据传输。在进行SSL加密传输时可能需要先了解CA、证书及SSL相关知识才能更好地明白为何基于SSL的传输就会更加安全。CA、证书及SSL相关知识在本章节不会多加一说明,详情可以看本博客提供的“信息安全之PKI及数字证书介绍”和“HTTPS协议和原理介绍”章节。
首先Master和Slave上分别检查SSL状态信息。
mysql> show global variables like '%ssl%';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | |
+---------------+----------+
9 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql>showglobalvariableslike'%ssl%';
+---------------+----------+
|Variable_name|Value|
+---------------+----------+
|have_openssl|DISABLED|
|have_ssl|DISABLED|
|ssl_ca||
|ssl_capath||
|ssl_cert||
|ssl_cipher||
|ssl_crl||
|ssl_crlpath||
|ssl_key||
+---------------+----------+
9rowsinset(0.00sec)
确保你看到的是disabled,而不是NO的选项。这表示你的mysql服务器支持ssl,只是没有在启动的时候开启ssl功能,当服务器启动ssl功能的时候,你会看到图中的disabled会显示yes。
下面需要开启支持SSL并设置加密方法,私钥文件等信息。
首先说明一点,我的实验环境把CA服务器、主服务器和从服务器都放在了同一台服务器上面。
1)配置CA服务器
$ cd /etc/pki/CA
$ (umask 077;openssl genrsa -out private/cakey.pem 2048)
$ openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
$ touch {index.txt,serial}
$ echo 01 > serial
1
2
3
4
5
$cd/etc/pki/CA
$(umask077;opensslgenrsa-outprivate/cakey.pem2048)
$opensslreq-new-x509-keyprivate/cakey.pem-outcacert.pem-days3650
$touch{index.txt,serial}
$echo01>serial
下面是我自签证书时填写的信息:
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:sh
Locality Name (eg, city) [Default City]:sh
Organization Name (eg, company) [Default Company Ltd]:ej
Organizational Unit Name (eg, section) []:tech
Common Name (eg, your name or your server's hostname) []:mysql.ywnds.com
Email Address []:123@ywnds.com
1
2
3
4
5
6
7
CountryName(2lettercode)[XX]:cn
StateorProvinceName(fullname)[]:sh
LocalityName(eg,city)[DefaultCity]:sh
OrganizationName(eg,company)[DefaultCompanyLtd]:ej
OrganizationalUnitName(eg,section)[]:tech
CommonName(eg,yournameoryourserver'shostname)[]:mysql.ywnds.com
EmailAddress[]:123@ywnds.com
2)Master服务器生成证书
$ mkdir /ssl
$ cd /ssl
$ (umask 077;openssl