mysql建立ssl安全連線的配置

科技小能手發表於2017-11-12

mysql建立ssl安全連線的配置

1、環境、IP、安裝包:

centOS 5.4

虛擬機器了兩臺伺服器

mysql-5.1.48.tar.gz

openssl-0.9.8b.tar.gz

server:192.168.189.134

client:192.168.189.133

windows_client:192.168.6.82(本地電腦IP)

2、安裝openssl

mkdir /test/setup

cd /test/setup

tar zxvf openssl-0.9.8b.tar.gz

cd openssl-0.9.8b

./config

make && make install

3、安裝mysql

cd /test/setup

tar zxvf mysql-5.1.48.tar.gz

cd mysql-5.1.48

./configure –prefix=/usr/local/mysql –with-ssl –with-vio

make && make install

 useradd mysql

 cd /usr/local/mysql

 bin/mysql_install_db –user=mysql

 chown -R mysql:mysql . 

 chown -R mysql /usr/local/mysql 

 chgrp -R mysql . 

 cp share/mysql/mysql.server /etc/init.d/mysqld 

 chmod 755 /etc/init.d/mysqld

 chkconfig –add mysqld

 

ln -s /usr/local/mysql/bin/mysqld_safe /usr/bin/mysqld_safe

ln -s /usr/local/mysql/share/mysql/mysql.server /usr/bin/mysqld

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

ln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump

ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

ln -s /usr/local/mysql/include/mysql /usr/include/mysql

echo “/usr/local/mysql/lib/mysql” >> /etc/ld.so.conf

ldconfig

 

cp /usr/local/mysql/share/mysql/my-huge.cnf  /etc/my.cnf

問題:可能碰到的問題./configure 後會報錯

/bin/rm: cannot remove `libtoolt`: No such file or directory 

答案連結:http://holy2010.blog.51cto.com/1086044/448630

4、開啟mysql中ssl功能

登入Mysql檢視

mysql> show variables like `%ssl%`; 

+—————+———-+ 

| Variable_name | Value    | 

+—————+———-+ 

| have_openssl  | DISABLED | 

| have_ssl      | DISABLED | 

| ssl_ca        |          | 

| ssl_capath    |          | 

| ssl_cert      |          | 

| ssl_cipher    |          | 

| ssl_key       |          | 

+—————+———-+

如果mysql輸出如上所述,那麼繼續操作開啟ssl;如果不是,重新編譯安裝mysql,注意生成makefile時填寫引數正確。

退出mysql,編輯/etc/my.cnf

在[mysqld]和[mysqldump]之間,加入下列配置資訊:

ssl

儲存後重新啟動mysql,再次登入mysql

mysql -uroot -p

mysql> show variables like `%ssl%`; 

+—————+——-+ 

| Variable_name | Value | 

+—————+——-+ 

| have_openssl  | YES   | 

| have_ssl      | YES   | 

| ssl_ca        |       | 

| ssl_capath    |       | 

| ssl_cert      |       | 

| ssl_cipher    |       | 

| ssl_key       |       | 

+—————+——-+ 

輸出結果顯示YES,現在ssl被完美啟動起來了。



5、通過openssl生成證書的配置:

在server伺服器上生成ssl祕鑰

mkdir -p /etc/mysql/newcerts 

cd /etc/mysql/newcerts 

openssl genrsa 2048 > ca-key.pem 

openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem 

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem 

openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem 

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem 

openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

檢視一下都生成了什麼檔案

[root@puppet newcerts]# ll /etc/mysql/newcerts 

total 64

-rw-r–r– 1 root root 1541 Mar  8 16:36 ca-cert.pem

-rw-r–r– 1 root root 1675 Mar  8 16:33 ca-key.pem

-rw-r–r– 1 root root 1224 Mar  8 16:40 client-cert.pem

-rw-r–r– 1 root root 1679 Mar  8 16:40 client-key.pem

-rw-r–r– 1 root root 1082 Mar  8 16:40 client-req.pem

-rw-r–r– 1 root root 1224 Mar  8 16:39 server-cert.pem

-rw-r–r– 1 root root 1675 Mar  8 16:38 server-key.pem

-rw-r–r– 1 root root 1082 Mar  8 16:38 server-req.pem

好了,祕鑰生成了,下面需要做的是把ca-cert.pem、client-cert.pem、and client-key.pem拷貝到client伺服器上,首先我們在client伺服器上建立同樣的資料夾。

mkdir -p /etc/mysql/newcerts

現在在主伺服器上把祕鑰檔案拷貝到client伺服器上

scp /etc/mysql/newcerts/ca-cert.pem /etc/mysql/newcerts/client-cert.pem /etc/mysql/newcerts/client-key.pem root@192.168.189.133:/etc/mysql/newcerts

繼續修改主伺服器上的my.cnf

在原先上面新增ssl的地方新增證書路徑

ssl

ssl-ca=/etc/mysql/newcerts/ca-cert.pem

ssl-cert=/etc/mysql/newcerts/server-cert.pem

ssl-key=/etc/mysql/newcerts/server-key.pem

重啟主伺服器的Mysql

進入資料庫為client的IP端賦權select許可權:

GRANT SELECT ON *.* TO `test1`@`client_IP` IDENTIFIED BY `111111` REQUIRE SSL;

配置clinet端的my.cnf

[mysql]下面新增證書路徑

ssl-ca/etc/mysql/newcerts/ca-cert.pem

ssl-cert=/etc/mysql/newcerts/client-cert.pem

ssl-key=/etc/mysql/newcerts/client-key.pem

配置完成後,呼叫mysql程式執行s或SHOW STATUS LIKE `SSL%`命令,如果看到SSL:的資訊行就說明是加密連線了。如果把SSL相關的配置寫進選項檔案,則預設是加密連線的。也可用mysql程式的–skip-ssl選項取消加密連線。如果用命令列方式啟用加密連線可以這樣寫:

mysql –ssl-ca=ca-cert.pem –ssl-cert=client-cert.pem –ssl-key=client-key.pem

若是對於windows系統的client的話 

把伺服器上的證書拷貝到Mysql所在的目錄下SSL_key,建立SSL_key目錄

my.ini中port=3306下面新增

ssl-ca=”C:wampmysqlSSL_keyca-cert.pem”

ssl-cert=”C:wampmysqlSSL_keyclient-cert.pem”

ssl-key=”C:wampmysqlSSL_keyclient-key.pem”

重啟生效 

也在服務端上為windows賦權

GRANT SELECT ON *.* TO `test1`@`windows_client_IP` IDENTIFIED BY `111111` REQUIRE SSL; 

由於是虛擬機器的環境,本地這個windowsIP為192.168.189.1 而不是為實際的IP192.168.7.82賦權

6、在client端測試是否可以用證書登入server端的資料否

mysql -h192.168.189.134 -utest1 -p 

輸入密碼登入成功

為了證明證書是否起作用 

你配置檔案中把證書的路徑給去掉或則註釋掉

再進行登入看是否登入

結果是沒有證書登入不上



配置完畢

 

 

修改待續~~~~

 

 

有個詭異的問題:

我又另外配置了一臺伺服器但是生成證書後就是無效,客戶端只有ssl-key=client-cert.pem這項有用,而且詭異的是 用原先機器生成的證書都是正常

本文轉自 holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/509973


相關文章