当使用非加密方式连接MySQL数据库时,在网络中传输的所有信息都是明文的,可以被网络中所有人截取,敏感信息可能被泄露。在传送敏感信息(如密码)时,可以采用SSL连接的方式。
一、配置MySQL服务端支持SSL连接
1. MySQL 5.7.6以前版本的配置方法:
a. 使用命令手工创建SSL文件:
# pwd
/data/mysql562
# mkdir certs
# cd certs
创建CA文件:
# openssl genrsa 2048 > ca-key.pem
# openssl req -new -x509 -nodes -days 3600 \
> -key ca-key.pem -out ca.pem
创建服务端公钥和私钥:
# openssl req -newkey rsa:2048 -days 3600 \
> -nodes -keyout server-key.pem -out server-req.pem
# openssl rsa -in server-key.pem -out server-key.pem
# openssl x509 -req -in server-req.pem -days 3600 \
> -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
创建客户端公钥和私钥:
# openssl req -newkey rsa:2048 -days 3600 \
> -nodes -keyout client-key.pem -out client-req.pem
# openssl rsa -in client-key.pem -out client-key.pem
# openssl x509 -req -in client-req.pem -days 3600 \
> -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
# chown mysql.mysql -R /data/mysql562/certs
检查创建的文件:
# ll
-rw-r--r--. 1 mysql mysql 1679 3月  10 11:44 ca-key.pem
-rw-r--r--. 1 mysql mysql 1220 3月  10 11:44 ca.pem
-rw-r--r--. 1 mysql mysql 1090 3月  10 11:49 client-cert.pem
-rw-r--r--. 1 mysql mysql 1675 3月  10 11:49 client-key.pem
-rw-r--r--. 1 mysql mysql  952 3月  10 11:49 client-req.pem
-rw-r--r--. 1 mysql mysql 1090 3月  10 11:47 server-cert.pem
-rw-r--r--. 1 mysql mysql 1679 3月  10 11:46 server-key.pem
-rw-r--r--. 1 mysql mysql  952 3月  10 11:46 server-req.pem
b. 修改MySQL服务端配置文件/etc/my.cnf,增加以下参数:
[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem
2. MySQL5.7.6及以后版本的配置方法:
a. 使用MySQL提供的脚本创建SSL文件,会创建到数据库所在目录中:
# pwd
/usr/local/mysql
# ./bin/mysql_ssl_rsa_setup
# cd /data/mysql3306/data/
# chown mysql.mysql *
# ll
-rw-------. 1 mysql mysql     1679 3月  10 13:21 ca-key.pem
-rw-r--r--. 1 mysql mysql     1074 3月  10 13:21 ca.pem
-rw-r--r--. 1 mysql mysql     1078 3月  10 13:21 client-cert.pem
-rw-------. 1 mysql mysql     1675 3月  10 13:21 client-key.pem
-rw-------. 1 mysql mysql     1679 3月  10 13:21 private_key.pem
-rw-r--r--. 1 mysql mysql      451 3月  10 13:21 public_key.pem
-rw-r--r--. 1 mysql mysql     1078 3月  10 13:21 server-cert.pem
-rw-------. 1 mysql mysql     1679 3月  10 13:21 server-key.pem
b. 修改MySQL服务端配置文件/etc/my.cnf,增加以下参数:
[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem
二、配置客户端以SSL方式连接MySQL:
在服务器端配置了SSL参数后,客户端发起连接时默认使用SSL方式。
1. 命令行方式使用SSL连接:
# mysql -h192.168.20.246 -P 3306 -uroot -p
Enter password:
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapperConnection id:          4
Current database:
Current user:           root@192.168.20.253
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.17 MySQL Community Server (GPL)
Protocol version:       10
Connection:             192.168.20.246 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 4 min 42 sec
2. 以非加密方式连接MySQL:
# mysql -h192.168.20.246 -P 3306 -uroot -p --ssl-mode=DISABLED
Enter password:
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapperConnection id:          7
Current database:
Current user:           root@192.168.20.253
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.17 MySQL Community Server (GPL)
Protocol version:       10
Connection:             192.168.20.246 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 6 min 5 sec
3. 设置用户必须以SSL方式连接MySQL数据库:
mysql> create user hy@'%' identified by 'XXxx_123' require ssl;
mysql> grant select on *.* to hy@'%';此时以非加密方式连接会报错:
# mysql -h192.168.20.246 -P 3306 -uhy -p --ssl-mode=DISABLED
Enter password:
ERROR 1045 (28000): Access denied for user 'hy'@'192.168.20.253' (using password: YES)
三、启用X509身份认证
使用上述步骤创建的符合X509格式的CA文件、公钥、私钥可以对连接进行身份认证,进一步提高连接的安全性。需先将CA文件、公钥、私钥分发给客户端。
1. 设置用户必须以X509方式验证身份后连接数据库:
mysql> create user hrb@'%' identified by 'XXxx_123' require x509;
mysql> grant select on *.* to hrb@'%';
2. 在客户端使用分发的CA文件、公钥、私钥连接数据库:
# mysql -h192.168.20.246 -P 3306 -uhrb -p --ssl-ca=./ca.pem --ssl-cert=./client-cert.pem --ssl-key=client-key.pem
Enter password:
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapperConnection id:          14
Current database:
Current user:           hrb@192.168.20.253
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.17 MySQL Community Server (GPL)
Protocol version:       10
Connection:             192.168.20.246 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 35 min 2 sec此时若不指定CA文件、公钥、私钥,仅使用SSL连接数据库会报错:
# mysql -h192.168.20.246 -P 3306 -uhrb -p
Enter password:
ERROR 1045 (28000): Access denied for user 'hrb'@'192.168.20.253' (using password: YES)

使用SSL安全连接MySQL数据库相关推荐

  1. Java连接Mysql数据库警告:Establishing SSL connection without server's identity

    Java连接Mysql数据库警告:Establishing SSL connection without server's identity verification is not recommend ...

  2. 普元 AppServer 6.5 业务应用连接mysql数据库报错:java.security.UnrecoverableKeyException: Password verification fai

    问题] AppServer 6.5 业务应用连接mysql数据库报错: [解答] 问题原因:mysql高版本需要指明是否进行SSL连接,当前配置的mysql连接字符串url中没有指定是否进行SSL连接 ...

  3. mysql 数据库dbhelp_使用JDBC连接MYSQL数据库的问题

    ------------这是源代码-------- package util; import java.sql.Connection; import java.sql.DriverManager; p ...

  4. 连接mysql数据库失败问题

    1.javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify的解决办法        https ...

  5. linux(ARM架构)下的mysql安装、QT连接mysql数据库(完整版)

    一.安装MYSQL之前要先换源 二.安装MYSQL 1.安装 2.安装完成 3.安装后无法登陆 3.1 原因 3.2 登陆后切换database 3.3 修改密码(注意这里账号和密码是双引号) 3.4 ...

  6. jdbc连接云数据库mysql数据库_如何通过JDBC连接MySQL数据库

    通过JDBC连接MySQL数据库,代码中的JDBC链接格式如下: jdbc:mysql://:/?sslmode=verify-full&sslrootcert= 表1参数说明参数 说明 如果 ...

  7. 使用eclipse连接mysql数据库步骤

    1.导入连接MySQL数据库驱动包(例如mysql-connector-java-5.1.7-bin.jar),并测试. 步骤: 1)在eclipse里面点击右上角的图标,如下图所示. 2)选中Dat ...

  8. jdbc连接云数据库mysql_如何通过JDBC连接MySQL数据库

    通过JDBC连接MySQL数据库,代码中的JDBC链接格式如下: jdbc:mysql://:/?sslmode=verify-full&sslrootcert= 表1参数说明参数 说明 如果 ...

  9. 连接mysql数据库字符串_MySQL数据库中怎么将字符串连接操作

    MySQL数据库中怎么将字符串连接操作 发布时间:2020-11-30 09:54:14 来源:亿速云 阅读:68 作者:小新 小编给大家分享一下MySQL数据库中怎么将字符串连接操作,相信大部分人都 ...

最新文章

  1. 数据可视化完美指南-R-Python
  2. 调试代码 2017-03-13
  3. SAP Spartacus 服务器端渲染找不到 index 视图的问题
  4. php显示上一次登陆的时间长,PHP 用COOKIE实现记住上一次登陆的数据
  5. 535 Login Fail. Please enter your authorization code to login. More information in http://service.ma
  6. c语言选择循环实验报告,C语言程序设计实验报告选择与循环结构程序设计.doc
  7. c#不可忍受之慢——谁是罪魁祸首
  8. 鸿蒙 OS 背后神秘人物曝光!
  9. 编程语言中的常量折叠(const folding)
  10. 帆软日期参数联动方法
  11. 在html种颜色的代码,html颜色代码生成器
  12. 实施Scrum敏捷开发的关键要素
  13. HTML中font标签中size属性值对应的像素大小
  14. java11的下载与安装及环境配置
  15. 网页浏览flash时不停黑屏
  16. java代码如何整合_Java如何合并两个PPT文档?
  17. Android仿朋友圈照片定点放大和滑动查看(未完待续)
  18. 实验二 面向对象(一)(预习报告)
  19. u盘插在电脑上灯亮没有反应_u盘插电脑灯在闪但是没反应怎么办
  20. 【acadres.dll文件丢失怎么办】acadres.dll文件丢失的解决办法

热门文章

  1. hisi3559av100 烧录镜像
  2. Ubuntu 20.04.4 LTS部署Mirai QQ机器人
  3. WINAMP SDK 常见问题回答(FAQ)
  4. [HTML]空格实体/转义字符
  5. ios 权限提示语_最友好的访问权限之iOS权限提示
  6. python爬虫-Day04
  7. 智方6000系五金交电销售管理系统 卡巴斯基反病毒软件
  8. 某可人官方网站挂马Trojan-PSW.Win32.OnLineGames.sbg
  9. 电脑开始锁定计算机有什么用,电脑Scroll Lock键有什么用的
  10. Msfvenom介绍及利用