配置 MySQL 使用加密连接

通过 MySQL 客户端和服务器之间的未加密连接,可以访问网络的人可以监视您的所有流量并检查客户端和服务器之间发送或接收的数据。

当您必须以安全的方式通过网络移动信息时,未加密的连接是不可接受的。要使任何类型的数据不可读,请使用加密。加密算法必须包含安全元素以抵御多种已知攻击,例如更改加密消息的顺序或重放数据两次。

MySQL 使用 TLS(传输层安全)协议支持客户端和服务器之间的加密连接。TLS 有时被称为 SSL(安全套接字层),但 MySQL 实际上并不使用 SSL 协议进行加密连接,因为它的加密很弱。

TLS 使用加密算法来确保通过公共网络接收的数据是可信的。它具有检测数据更改、丢失或重放的机制。TLS 还包含使用 X.509 标准提供身份验证的算法。

X.509 使得在 Internet 上识别某人成为可能。基本上,应该有一个称为“证书颁发机构”(或 CA)的实体,可以将电子证书分配给需要它们的任何人。证书依赖于具有两个加密密钥(一个公钥和一个秘密密钥)的非对称加密算法。证书所有者可以将证书出示给另一方作为身份证明。证书由其所有者的公钥组成。使用此公钥加密的任何数据只能使用相应的私钥进行解密,该私钥由证书所有者持有。

默认情况下,如果服务器支持加密连接,MySQL 程序会尝试使用加密进行连接,如果无法建立加密连接,则回退到未加密的连接。

加密连接的服务器端启动配置

在服务器端,该–ssl 选项指定服务器允许但不需要加密连接。此选项默认启用,因此无需明确指定。

要要求客户端使用加密连接进行连接,请启用 require_secure_transport系统变量。
服务器端的这些系统变量指定了服务器在允许客户端建立加密连接时使用的证书和密钥文件:

  • ssl_ca:证书颁发机构 (CA) 证书文件的路径名。(ssl_capath类似,但指定 CA 证书文件目录的路径名。)

  • ssl_cert:服务器公钥证书文件的路径名。可以将此证书发送到客户端并根据其拥有的 CA 证书进行身份验证。

  • ssl_key:服务器私钥文件的路径名。

例如,要为加密连接启用服务器,请使用my.cnf 文件中的这些行启动它,并根据需要更改文件名:

[mysqld]
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem

要另外指定客户端需要使用加密连接,请启用 require_secure_transport系统变量:

[mysqld]
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
require_secure_transport=ON

加密连接的客户端配置

有关与建立加密连接相关的客户端选项的完整列表,请参阅加密连接的 命令选项。

默认情况下,如果服务器支持加密连接,MySQL 客户端程序会尝试建立加密连接,并通过–ssl-mode选项进一步控制 :

  • 在没有–ssl-mode选项的情况下 ,客户端尝试使用加密进行连接,如果无法建立加密连接,则回退到未加密的连接。这也是具有显式–ssl-mode=PREFFERED选项的行为 。

  • 使用–ssl-mode=REQUIRED,客户端需要加密连接,如果无法建立连接则失败。

  • 使用–ssl-mode=DISABLED,客户端使用未加密的连接。

  • 使用–ssl-mode=VERIFY_CA或 --ssl-mode=VERIFY_IDENTITY,客户端需要加密连接,并且还针对服务器 CA 证书和(使用 VERIFY_IDENTITY)针对其证书中的服务器主机名执行验证。

如果在require_secure_transport服务器端启用系统变量导致服务器需要加密连接,则尝试建立未加密的连接会失败 。请参阅将 加密连接配置为必需。

客户端的以下选项标识客户端在与服务器建立加密连接时使用的证书和密钥文件。他们是类似 ssl_ca, ssl_cert以及 ssl_key在服务器端使用的系统变量,但 --ssl-cert并 --ssl-key识别客户端公钥和私钥:

  • –ssl-ca:证书颁发机构 (CA) 证书文件的路径名。如果使用此选项,则必须指定服务器使用的相同证书。(–ssl-capath类似,但指定 CA 证书文件目录的路径名。)

  • –ssl-cert:客户端公钥证书文件的路径名。

  • –ssl-key:客户端私钥文件的路径名。

  • 注意:
    主机名身份验证 VERIFY_IDENTITY不适用于由服务器自动创建或使用mysql_ssl_rsa_setup手动创建的自签名证书。此类自签名证书不包含服务器名称作为 Common Name 值。

假设您要使用没有特殊加密要求的帐户或使用CREATE USER包含该REQUIRE SSL子句的语句创建的帐户进行连接 。假设服务器支持加密连接,客户端可以使用无–ssl-mode选项或显式–ssl-mode=PREFFERED 选项的加密进行连接 :

mysql

或者:

mysql --ssl-mode=PREFERRED

对于使用REQUIRE SSL 子句创建的帐户,如果无法建立加密连接,则连接尝试失败。对于没有特殊加密要求的帐户,如果无法建立加密连接,则尝试回退到未加密连接。如果无法获得加密连接,则为防止回退和失败,请按如下方式连接:

mysql --ssl-mode=REQUIRED

如果账户有更严格的安全要求,则必须指定其他选项来建立加密连接:

对于使用REQUIRE X509 子句创建的帐户,客户必须至少指定 --ssl-cert和 --ssl-key。此外, 建议使用–ssl-ca(或 --ssl-capath),以便验证服务器提供的公共证书。例如(在一行中输入命令):

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

对于使用REQUIRE ISSUERorREQUIRE SUBJECT 子句创建的帐户,加密要求与 for 相同 REQUIRE X509,但证书必须分别与帐户定义中指定的问题或主题相匹配。

要防止使用加密并覆盖其他 选项,请使用以下命令调用客户端程序 : --ssl-xxx–ssl-mode=DISABLED

mysql --ssl-mode=DISABLED

要确定当前与服务器的连接是否使用加密,请检查Ssl_cipher状态变量的会话值 。如果该值为空,则连接未加密。否则,连接被加密并且该值指示加密密码。例如:

mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| Ssl_cipher    | DHE-RSA-AES128-GCM-SHA256 |
+---------------+---------------------------+

对于mysql客户端,另一种方法是使用STATUSor\s 命令并检查该SSL行:

mysql> \s
...
SSL: Not in use
...

或者:

mysql> \s
...
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
...

将加密连接配置为必需

对于某些 MySQL 部署,使用加密连接不仅是可取的,而且是强制性的(例如,为了满足监管要求)。本节讨论使您能够执行此操作的配置设置。这些控制级别可用:

您可以将服务器配置为要求客户端使用加密连接进行连接。

您可以调用单个客户端程序来要求加密连接,即使服务器允许但不需要加密。

您可以将单个 MySQL 帐户配置为仅可通过加密连接使用。

要要求客户端使用加密连接进行连接,请启用 require_secure_transport系统变量。例如,将这些行放在服务器 my.cnf文件中:

[mysqld]
require_secure_transport=ON

与require_secure_transport 启用,到服务器的客户端连接都需要使用某种形式的安全传输,而服务器只允许TCP / IP连接,使用SSL,或使用一个套接字文件(在Unix)连接或共享内存(在Windows上)。服务器拒绝非安全连接尝试,这些尝试失败并显示 ER_SECURE_TRANSPORT_REQUIRED 错误。

调用的客户端程序,使得它需要加密的连接的服务器是否需要加密,使用 --ssl-mode的选项值 REQUIRED,VERIFY_CA或 VERIFY_IDENTITY。例如:

mysql --ssl-mode=REQUIRED
mysqldump --ssl-mode=VERIFY_CA
mysqladmin --ssl-mode=VERIFY_IDENTITY

要将 MySQL 帐户配置为仅可通过加密连接使用,请在CREATE USER创建帐户的语句中包含一个REQUIRE子句 ,在该子句中指定您需要的加密特性。例如,要要求加密连接并使用有效的 X.509 证书,请使用REQUIRE X509:

CREATE USER 'jeffrey'@'localhost' REQUIRE X509;

参考

https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html

MySQL配置SSL访问-配置 MySQL 使用加密连接相关推荐

  1. 本地MySQL数据库要访问远程MySQL数据库的表中的数据的实现

    转自: http://blog.csdn.net/jenminzhang/article/details/9872647 1.实现基本思路:借助 MySQL的 federated 存储引擎实现 fed ...

  2. nginx普通配置/负载均衡配置/ssl/https配置

    1.nginx普通配置 server {listen 80;server_name jqlin.lynch.com;access_log /var/log/nginx/main.log main;er ...

  3. Office365配置Outlook客户端报到服务器的加密连接不可用如何处理?

    Office365配置Outlook客户端报错到服务器的加密连接不可用如何处理? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者 博客:https ...

  4. mysql和FTP结合,vsftp基于mysql和ssl的配置

    mysql虚拟用户账户的设置步骤 1.安装mysql  mysql-devel mysql-server 2.service mysqld restart 3.mysqladmin - u root  ...

  5. MySQL的 SSL 连接配置

    MySQL的 SSL 连接配置 1.#创建 CA 私钥和 CA 证书 /etc/mysqlCert 生成一个 CA 私钥 openssl genrsa 2048 > ca-key.pem 生成一 ...

  6. tomcat配置SSL加密网站

    01安装openjdk [root@client ~]# yum -y install java-1.8.0-openjdk 02查看版本 [root@client ~]# java -version ...

  7. SSL证书配置(https访问接口, 单向认证和双向认证)

    拿到SSL证书后, 如何才能解锁更多玩法? 一. SpringBoots项目配置https访问接口(直接配置) SSL协议 配置步骤 1. 获取证书/ 生成证书 2. 放置证书 3. 配置项目 pro ...

  8. Nginx配置SSL后不能正常访问解决方法

    今天决定给自己的站点配置SSL,配置完成后发现不能正常访问,思来想去发现是未开启443端口. Linux防火墙开放特定端口 方法一 找到/etc/sysconfig/iptables文件加入如下代码, ...

  9. MySQL OCP888题解031-使用X509加密连接

    文章目录 1.原题 1.1.英文原题 1.2.中文翻译 1.3.答案 2.题目解析 2.1.题干解析 2.2.选项解析 3.知识点 3.1.知识点1:X509(X.509) 3.2.知识点2:创建需要 ...

最新文章

  1. 【廖雪峰python入门笔记】tuple_创建
  2. python3 的range
  3. 【IT资讯】Linus Torvalds:我们都老了,但Linux维护真的很难找
  4. xajax中的中文乱码问题
  5. 1/3 常用符号:类型说明符
  6. 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形
  7. 最大隶属度原则_模糊数学笔记:六、模糊模型识别-I(最大隶属度原则)
  8. Idea下springboot+easyUI的下载与集成
  9. 对一个三角形三边如何设计测试用例等价类经典应用
  10. devise的使用的中文教程
  11. 高并发、高访问量如何计算【测试评估】
  12. 中国诞生全球最强量子模拟器 量子计算迈出大步
  13. matlab纹理特征提取方法,基于共生矩阵纹理特征提取
  14. 从单体式架构迁移到微服务架构,简述java程序的运行原理
  15. 小姐姐让我帮忙修照片
  16. h5打印时如何控制打印区域(基于jquery.PrintArea.js实现)
  17. 使用ghost 快速安装操作系统
  18. 山河盟:人类为大地母亲准备的一份礼物
  19. Adobe Acrobat DC 2022 直装版
  20. 【tio-websocket】2、SpringBoot整合tio-websocket-server

热门文章

  1. 电脑系统重装篇4:Windows 10 专业版安装步骤(UltraISO)
  2. 15个最好用的JavaScript代码压缩工具
  3. (75)Part18【作业】-课程管理(二)-03-发布课程
  4. 爱奇途——追求技术,提升自我
  5. 用友t3服务器系统管理显示类型不匹配,登录账套提示:“类型不匹配”
  6. 读阿里程序员的文章有感
  7. 淘宝开放平台应用申请?淘宝开放平台API申请?
  8. NINJUTSU OS安装
  9. dhtml是基于html的一门语言,用户直接使用集成的动态HTML语言(简称DHTML)来开发基于.ppt...
  10. Java实现ModbusTCP通信