当前位置: 首页 > news >正文

TCP和套接字SSL加密连接行为分析

目录

一、前言

二、背景

三、参数介绍

3.1、 have_openssl

3.2、have_ssl

3.3、require_secure_transport

四、--ssl-mode=mode

五、CREATE USER SSL/TLS选项

六、问题验证

6.1、使用套接字连接

6.2、使用TCP连接

七、分析与总结


一、前言

SSL(Secure Sockets Layer)认证是客户端到云数据库服务器端的认证,对用户和服务器进行认证。开通 SSL 加密,可获取 CA 证书,将 CA 证书上传在服务端。在客户端访问数据库时,将激活 SSL 协议,在客户端和数据库服务端之间建立一条 SSL 安全通道,实现数据信息加密传输,防止数据在传输过程中被截取、篡改、窃听,保证双方传递信息的安全性。

SSL 协议要求建立在可靠的传输层协议(TCP)之上,其优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP、FTP、TELNET 等)能透明地建立于 SSL 协议之上。SSL 协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作,在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

二、背景

使用非加密方式连接数据库时,在网络中传输的所有信息都是明文,因此存在被非法用户窃听、篡改、冒充的三大风险;而 SSL 协议是为解决这三大风险而设计的,理论上可达到:

  • 信息是加密传播,第三方无法窃听。
  • 具有校验机制,一旦被篡改,通信双方会立刻发现。
  • 配备身份证书,防止身份被冒充。

数据库 MySQL 支持通过开启 SSL 加密来增强链路安全性,并支持下载和安装 SSL CA 证书到需要的应用服务。

SSL 加密不保护数据本身,是确保来往于数据库和服务器之间的流量安全,在传输层对网络连接进行加密,能够提升通信数据的安全性和完整性,但会同时增加网络连接响应时间。

三、参数介绍

3.1、 have_openssl

  • 这个变量表示 MySQL 服务器是否编译时包含了 OpenSSL 支持。OpenSSL 是一个开源的加密库,广泛用于实现 SSL 和 TLS 协议。
  • 如果值为 YES,表示服务器支持 OpenSSL,可以用于建立安全的 SSL 连接。

3.2、have_ssl

  • 这个变量表示 MySQL 服务器是否编译时包含了 SSL 支持。SSL(Secure Sockets Layer)用于在客户端和服务器之间建立安全的加密连接。
  • 如果值为 YES,表示服务器支持 SSL,可以配置 SSL 加密连接。

3.3、require_secure_transport

  • require_secure_transport 设置为 ON 时,MySQL 服务器会拒绝所有非加密的客户端连接。这意味着所有客户端连接都必须使用 SSL/TLS 加密,以确保数据传输的安全性。
  • 默认情况下,require_secure_transport 设置为 OFF,允许非加密连接。

四、--ssl-mode=mode

8.0官方文档:https://dev.mysql.com/doc/refman/8.0/en/connection-options.html

  • DISABLED:禁用 SSL 加密连接。客户端可以不使用 SSL 连接。
  • PREFERRED:首选 SSL 加密连接,如果服务器不支持 SSL,客户端会退回到非加密连接。这是默认值。

  • REQUIRED:必须使用 SSL 加密连接,如果服务器不支持 SSL,连接将失败。
  • VERIFY_CA:必须使用 SSL 加密连接,并验证服务器证书是否由受信任的证书颁发机构签发。
  • VERIFY_IDENTITY:必须使用 SSL 加密连接,并验证服务器证书的主机名或 IP 地址是否与实际连接的主机名或 IP 地址匹配。

五、CREATE USER SSL/TLS选项

官方文档:https://dev.mysql.com/doc/refman/8.0/en/create-user.html#create-user-tls

create user 允许tls_option的值有多个,下面只介绍SSL

  • SSL

通知服务器只允许语句指定的所有帐户进行加密连接。

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

默认情况下,客户端尝试建立安全连接。对于具有REQUIRE SSL的帐户,如果无法建立安全连接,则连接尝试失败。

六、问题验证

6.1、使用套接字连接

这里创建一个demo4的用户并设置该账号进行加密连接

尝试使用套接字进行连接,可以看到这里没有进行安全连接导致连接失败,而指定--ssl-ca后则连接成功,并且使用了ssl加密

6.2、使用TCP连接

可以看到使用TCP连接时,没有指定--ssl-mode的模式,也没有指定--ssl-ca,但是可以连接成功,没有被拒绝掉,并且连接后发现实际链路还是加密了的

七、分析与总结

问题分析:

  • 首先TCP 连接是网络层的连接方式,而 SSL 加密是应用层的安全协议。
  • 其次REQUIRE SSL 仅是账号级别的限制,而非协议级别的强制。
  • 最后发现当关闭have_ssl和have_openssl后,使用TCP连接后查看实际链路上并没有加密

实际连接行为:

have_sslhave_openssl 被禁用时:

  • 无论是使用 TCP 连接还是套接字连接,都不会进行加密连接。

have_sslhave_openssl 被启用时:

  • TCP 连接:MySQL 服务器会默认尝试使用加密连接,即使客户端没有显式指定 --ssl-ca 或其他 SSL 参数。这是因为服务器配置为支持 SSL,客户端驱动程序可能会自动协商使用 SSL。
  • 套接字连接:默认情况下,套接字连接(Unix socket)通常不使用 SSL 加密,因为它是一种本地通信方式。如果用户被设置为 REQUIRE SSL,而客户端没有显式指定 SSL 参数(如 --ssl-ca),连接将失败,因为套接字连接默认不使用 SSL。

相关文章:

  • 【Hadoop】--HA高可用搭建--3.2.2
  • mcp 学习第二篇
  • HTTPS实验室——TLS/TLCP一站式解决方案
  • 深入理解 Hadoop 核心组件 Yarn:架构、配置与实战
  • 上路兵线的理解-鳄鱼篇
  • vue3:十三、分类管理-表格--编辑、新增、详情、刷新
  • Android framework 问题记录
  • 整合安全能力:观测云进一步强化数据价值
  • 【内测征集】LarkVR 播控系统上新:VR 应用一站式专业播控与管理工具
  • 避开封禁陷阱:动态IP在爬虫、跨境电商中的落地实践
  • 电脑A和电脑B都无法ping通电脑C网络,电脑C可以ping通电脑A和B,使用新系统测试正常,排除硬件问题。
  • PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲
  • mongodb部署Shard Cluster
  • 【Spring Boot 整合 MongoDB 完整指南】
  • Icecream Video Editor:简单易用的视频编辑软件,轻松打造专业视频
  • 基于51单片机教室红外计数灯光控制—可蓝牙控制
  • npm 安装时 SSL 证书过期问题笔记
  • 2025最新Java基础八股文速记精简版(万字笔记)
  • 【Linux】系统指令与开发全栈(vim、ssh、gcc)
  • 项目中把webpack 打包改为vite 打包
  • 两次通话、三点诉求,泽连斯基对美称愿与俄签署和平备忘录
  • 多名幼师殴打女童被行拘后续,盘锦市教育局工作人员:该局将专项整治全市幼儿园
  • 4月份国民经济顶住压力稳定增长
  • 西域都护府博物馆今日在新疆轮台县开馆
  • 信俗与共:清代新疆回疆儒释道庙宇的中华政教
  • 女生“生理期请病假要脱裤子证明”?高校回应:视频经处理后有失真等问题