当前位置: 首页 > 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。

http://www.xdnf.cn/news/522613.html

相关文章:

  • 二分交互题总结
  • 深入探讨死区生成:原理、实现与应用
  • 词嵌入基础
  • 【Rust迭代器】Rust迭代器用法解析与应用实战
  • Python Django 的 ORM 编程思想及使用步骤
  • R语言数据可视化
  • Elasticsearch 深入分析三种分页查询【Elasticsearch 深度分页】
  • 力扣面试150题--从前序与中序遍历序列构造二叉树
  • Windows 下 Nginx 安装与配置指南 [特殊字符]
  • Axure难点解决分享:垂直菜单展开与收回(4大核心问题与专家级解决方案)
  • LeetCode 35 搜索插入位置题解
  • Axure设计数字乡村可视化大屏:构建乡村数据全景图
  • 【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ
  • 小程序弹出层/抽屉封装 (抖音小程序)
  • CSS- 4.6 radiu、shadow、animation动画
  • CVE-2015-4553 Dedecms远程写文件
  • prisma连接非关系型数据库mongodb并简单使用
  • 【QT】类A和类B共用类C
  • 分布式数据库TiDB:深度解析原理、优化与架构设计
  • 永磁同步电机高性能控制算法(22)——基于神经网络的转矩脉动抑制算法为什么低速时的转速波动大?
  • 批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
  • 【NLP】37. NLP中的众包
  • VR 互动实训与展示,借科技开启沉浸式体验新篇​
  • 【内测征集】LarkVR 播控系统上新:VR 应用一站式专业播控与管理工具
  • 基于CATIA参数化圆锥建模的自动化插件开发实践——NX建模之圆锥体命令的参考与移植(一)
  • Python函数——万字详解
  • Windows 安装显卡驱动
  • Linux云计算训练营笔记day11(Linux CentOS7)
  • esp32课设记录(五)整个项目开源github
  • 用Python将 PDF 中的表格提取为 Excel/CSV