消息队列篇--通信协议篇--SSL/TLS协议

概述:

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用于在网络通信中提供安全性的加密协议。TLS是SSL的后继版本,目前广泛使用的主要是TLS协议。它们的主要功能包括加密通信、身份验证和数据完整性检查,确保数据在传输过程中不被窃听、篡改或伪造。
HTTPS就是基于SSL/TLS实现的加密传输。

主要功能:
1、加密:确保数据在传输过程中不被窃听。
2、身份验证:通过数字证书验证服务器的身份,防止中间人攻击。
3、完整性检查:通过消息认证码(MAC)确保数据未被篡改。

1、SSL和TLS的历史

  • SSL(Secure Sockets Layer):

    • SSL是由Netscape公司在1994年开发的第一个安全协议。
    • SSL 1.0版本从未公开发布,因为存在严重的安全漏洞。
    • SSL 2.0在1995年发布,但很快被发现有安全问题。
    • SSL 3.0在1996年发布,修复了SSL 2.0中的许多问题,但在2014年被发现存在POODLE漏洞,不再推荐使用。
  • TLS(Transport Layer Security):

    • TLS是IETF(Internet Engineering Task Force)基于SSL 3.0开发的标准协议。
    • TLS 1.0在1999 年发布,与SSL 3.0非常相似,但有一些改进。
    • TLS 1.1在2006年发布,增加了对填充长度攻击的防御。
    • TLS 1.2在2008年发布,引入了更强大的加密算法(如AES和SHA-256),并修复了许多已知的安全问题。
    • TLS 1.3在2018年发布,简化了握手过程,提高了性能,并增强了安全性。

2、SSL/TLS握手过程

SSL/TLS握手是客户端和服务器之间建立安全连接的过程。握手的目标是生成一个共享的秘密密钥(会话密钥),用于后续的加密通信。

具体步骤:
(1)、客户端发起请求
客户端向服务器发送一个“Client Hello”消息,包含以下信息:

  • 支持的TLS版本。
  • 支持的加密套件列表(Cipher Suites)。
  • 客户端生成的一个随机数(Client Random)。
  • 可选的支持扩展(如Server Name Indication, SNI)。

示例:

Client Hello:Version: TLS 1.2Cipher Suites: [TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, ...]Client Random: <random bytes>Extensions: SNI (Server Name Indication)

(2)、服务器响应
服务器回应一个“Server Hello”消息,包含以下信息:

  • 选择的TLS版本。
  • 选择的加密套件(从客户端提供的列表中选择)。
  • 服务器生成的一个随机数(Server Random)。
  • 服务器的数字证书(包含公钥)。
  • 可选的会话ID(用于会话恢复)。

示例:

Server Hello:Version: TLS 1.2Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256Server Random: <random bytes>Certificate: <server certificate with public key>

(3)、客户端验证证书
客户端验证服务器提供的数字证书,确保其真实性。验证步骤包括:

  • 检查证书是否由受信任的 CA(Certificate Authority)签发。(即:使用CA的公钥验证签名)
  • 检查证书的有效期。
  • 检查证书是否已被吊销(通过CRL或OCSP)。

如果验证失败,握手终止;如果验证成功,继续下一步。

(4)、生成预主密钥
客户端生成一个预主密钥(Pre-Master Secret),并使用服务器的公钥对其进行加密,然后发送给服务器。

示例:

Client Key Exchange:Encrypted Pre-Master Secret: <encrypted pre-master secret>

(5)、计算会话密钥

  • 客户端:使用Client Random、Server Random和Pre-Master Secret计算出会话密钥。
  • 服务器:使用相同的Client Random、Server Random和Pre-Master Secret计算出会话密钥。

双方计算出的会话密钥相同,用于后续的加密通信。

(6)、完成握手
客户端和服务器交换“Finished”消息,确认握手成功。这些消息使用会话密钥进行加密,确保握手过程的完整性。

示例:

Client Finished:Encrypted Message: <encrypted finished message>Server Finished:Encrypted Message: <encrypted finished message>

3、加密套件(Cipher Suites)

加密套件定义了在SSL/TLS握手中使用的具体加密算法。

每个加密套件由以下部分组成:

  • 密钥交换算法:用于生成会话密钥(如RSA、ECDHE)。
  • 对称加密算法:用于加密实际传输的数据(如AES、ChaCha20)。
  • 消息认证码算法(MAC):用于确保数据的完整性(如HMAC-SHA256)。
  • 伪随机函数(PRF):用于生成会话密钥。

常见的加密套件示例:

  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
    • 密钥交换:ECDHE(椭圆曲线 Diffie-Hellman)
    • 数字签名:RSA
    • 对称加密:AES-128-GCM
    • MAC:SHA-256

4、数字证书

数字证书是由可信的第三方机构(CA,Certificate Authority)签发的电子文档,用于验证服务器的身份
(1)、证书包含以下信息

  • 持有者信息:服务器的域名、组织名称等。
  • 公钥:服务器证书的公钥。
  • 签发者信息:签发证书的CA信息。
  • 有效期:证书的有效时间范围。
  • 签名:CA使用其私钥对证书内容进行签名,确保证书的真实性。

客户端在握手过程中会验证服务器的数字证书,确保其由可信的CA签发,并且未被篡改。

(2)、证书链
为了提高效率和安全性,CA通常会签发中间证书。客户端验证证书时,需要沿着证书链追溯到根证书。例如:

  • 服务器证书:由中间CA签发。
  • 中间证书:由根CA签发。
  • 根证书:由全球可信的根CA签发,通常预装在操作系统或浏览器中。

5、通过openssl 生成证书示例

(1)、生成CA证书

命令示例:

openssl req -new -x509 -days 365 -nodes -out ca.pem -keyout ca-key.pem

作用解释:

  • 这个命令生成了一个自签名的CA证书(ca.pem)和对应的私钥(ca-key.pem)。CA证书将用于签发服务器和客户端的证书
  • 服务端和客户端:CA证书本身不会直接用于服务端或客户端,但它用于验证服务器和客户端证书的真实性。客户端和服务端都需要信任这个CA证书。

命令参数解释:

  • openssl req:这是OpenSSL的请求(Request)命令,用于生成证书签名请求(CSR)或直接生成自签名证书。
  • -new:表示这是一个新的证书请求。
  • -x509:表示生成的是一个自签名证书(X.509 格式),而不是证书签名请求(CSR)。自签名证书是不需要其他CA签发的证书,它自己就是自己的根证书。
  • -days 365:指定证书的有效期为365天。你可以根据需要调整这个值。
  • -nodes:表示私钥不进行加密(No DES)。如果不加这个选项,生成的私钥会要求输入密码进行加密。对于自动化部署或服务启动时,通常不希望每次都需要输入密码,因此使用-nodes选项。
  • -out ca.pem:指定输出的自签名证书文件名为ca.pem。
  • -keyout ca-key.pem:指定输出的私钥文件名为ca-key.pem。

简单理解下:
需要实现SSL(即网络加密通信),就需要在服务端和客户端都配置相关的证书。如果想要两个证书之间彼此能够信任,就要求两个证书都必须使用同一个CA证书进行签发。这样两个证书就可以彼此信任,两台机器就可以正常建立SSL连接了。

(2)、生成服务器证书

第一步:生成服务器的私钥和证书签名请求(CSR)
命令示例:

openssl req -newkey rsa:2048 -days 365 -nodes -keyout server-key.pem -out server-req.pem

作用:

  • 这个命令生成了服务器的私钥(server-key.pem)和证书签名请求(server-req.pem)。CSR 是一个包含公钥和其他信息(如域名、组织名称等)的文件,用于向CA申请签发证书。

参数解释:

  • openssl req:同上,用于生成证书签名请求(CSR)。
  • -newkey rsa:2048:生成一个新的2048位RSA私钥。你可以根据需要选择不同的密钥长度(如4096位)。
  • -days 365:指定证书的有效期为365天。
  • -nodes:同上,表示私钥不进行加密。
  • -keyout server-key.pem:指定输出的服务器私钥文件名为server-key.pem。
  • -out server-req.pem:指定输出的证书签名请求(CSR)文件名为server-req.pem。

第二步:使用CA证书签发服务器证书
命令示例:

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

作用:

  • 这个命令使用CA证书和私钥对服务器的CSR进行签名,生成服务器的正式证书(server-cert.pem)。
  • 服务端:服务器将使用server-cert.pem和server-key.pem来与客户端建立加密连接。客户端会验证服务器证书是否由可信的CA签发(即ca.pem)。

解释:

  • openssl x509:这是OpenSSL的X.509证书处理命令,用于生成和操作X.509证书。
  • -req:表示输入是一个证书签名请求(CSR),即server-req.pem。
  • -in server-req.pem:指定输入的CSR文件为server-req.pem。
  • -days 365:指定生成的服务器证书有效期为365天。
  • -CA ca.pem:指定用于签发证书的CA证书为ca.pem。
  • -CAkey ca-key.pem:指定用于签发证书的CA私钥为 ca-key.pem。
  • -set_serial 01:为证书设置一个唯一的序列号。每个证书都应该有一个唯一的序列号,以确保其唯一性。这里使用01作为序列号,实际应用中可以根据需要递增。
  • -out server-cert.pem:指定输出的服务器证书文件名为server-cert.pem。

(3)、生成客户端证书

第一步:生成客户端的私钥和证书签名请求(CSR)
示例:

openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-req.pem

作用:

  • 生成客户端的私钥和CSR,准备向CA申请签发客户端证书。

解释:

  • 这个命令与生成服务器证书的第一步类似,生成了客户端的私钥(client-key.pem)和证书签名请求(client-req.pem)。

第二步:使用CA证书签发客户端证书
示例:

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

作用:

  • 客户端:客户端将使用client-cert.pem和client-key.pem来与服务器建立加密连接。服务器会验证客户端证书是否由可信的CA签发(即ca.pem)。
    解释:
  • 这个命令与生成服务器证书的第二步类似,使用CA证书和私钥对客户端的CSR进行签名,生成客户端的正式证书(client-cert.pem)。

(4)、整体说明

从上面配置服务器的过程可以看出,签发服务器的过程都是一样的。
第一步都是先生成机器的私钥和CSR的请求文件(请求文件主要用于第二步配置CA证书)。
第二步,使用上一步的请求文件,生成正式的服务器证书。
两步执行后,最终给我们提供了适用于SSL连接的秘钥和客户端证书文件。

注意:
除了上诉手动创建和配置证书外,你也可以从商业证书颁发机构(如Let’s Encrypt、DigiCert)购买SSL证书,以获得更高的信任度。

6、TLS 1.3的改进

TLS 1.3是TLS协议的最新版本,带来了多项改进,主要包括:

(1)、简化握手过程
TLS 1.3将握手过程简化为两个往返(2-RTT),而在某些情况下(如会话恢复)可以减少到一次往返(1-RTT)。这显著减少了握手延迟,特别是在高延迟网络中。

(2)、更强的加密算法
TLS 1.3强制要求使用现代加密算法,如AES-GCM、ChaCha20-Poly1305和SHA-256。它还禁止使用弱加密算法(如RC4、MD5)。

(3)、前向保密(Forward Secrecy)
TLS 1.3要求所有密钥交换算法必须支持前向保密,这意味着即使攻击者获得了服务器的长期私钥,也无法解密过去的通信记录。常用的前向保密算法包括ECDHE和DHE。

(4)、零往返时间(0-RTT)
TLS 1.3引入了0-RTT功能,允许客户端在第一次握手时缓存会话密钥,并在后续连接中直接使用该密钥发送数据,从而减少握手延迟。然而,0-RTT存在重放攻击的风险,因此仅适用于幂等操作(如GET请求)。

7、常见攻击及预防

(1)、中间人攻击(Man-in-the-Middle Attack, MITM)
中间人攻击是指攻击者拦截并篡改客户端和服务器之间的通信。防御措施包括:

  • 使用HTTPS(TLS加密)确保通信的机密性和完整性。
  • 验证服务器的数字证书,确保其由可信的CA签发。

(2)、降级攻击(Downgrade Attack)
降级攻击是指攻击者迫使客户端和服务器协商使用较弱的加密套件。TLS 1.3通过强制要求使用强加密算法,有效防御了此类攻击。

(3)、心脏出血漏洞(Heartbleed Bug)
心脏出血漏洞是OpenSSL实现中的一个严重漏洞,允许攻击者读取服务器内存中的敏感数据。该漏洞已在后续版本中修复。

(4)、POODLE攻击
POODLE攻击针对SSL 3.0的CBC模式加密,允许攻击者解密部分加密数据。建议禁用SSL 3.0,使用更安全的TLS版本。

8、总结

  • SSL/TLS是用于在网络通信中提供安全性的加密协议,主要功能包括加密通信、身份验证和数据完整性检查。
  • 握手过程是客户端和服务器之间建立安全连接的关键步骤,涉及密钥交换、证书验证和会话密钥生成。
  • 数字证书由可信的CA签发,用于验证服务器的身份,确保通信的安全性。
  • TLS 1.3是最新的TLS版本,带来了多项改进,包括简化握手过程、更强的加密算法和前向保密机制。
  • 防御措施包括使用HTTPS、验证服务器证书、禁用弱加密算法等,以应对常见的安全威胁。

逆风翻盘,Dare To Be!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43046.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue在线录音系统

说明&#xff1a; 用vue做一款录音系统 1.点击按钮&#xff0c;开始录制音频 2.录制过程中&#xff0c;可以暂停和停止录制 有时长显示 3.点击停止录制 可以保存音频&#xff0c;保存在本地 4.找到刚刚保存的音频路径&#xff0c;可以点击播放 &#xff0c;需要显示音频总时…

参量编码LPC:原理分析与仿真实践

参量编码LPC&#xff1a;原理分析与仿真实践 在早期通信系统中&#xff0c;带宽资源有限&#xff0c;而波形编码要精确重现语音波形&#xff0c;这就需要较高的码率来传输大量数据&#xff0c;这在带宽不足的情况下就成了阻碍语音传输的大难题。随着通信技术不断进步&#xff…

猜猜我用的是哪个大模型?我的世界游戏界面简单的模拟效果

我的罗里吧嗦的&#xff0c;根据小朋友的要求&#xff0c;边听边写边输入的提示词&#xff1a; 请生成一段完整的在网页中用html5和javascript代码模拟“我的世界”中游戏场景的互动画面&#xff0c;要求提供若干人物选项可以选择&#xff0c;请自行选择需要使用哪些库或框架来…

el-radio-group 中 el-radio-button value未能绑定上数值数据

这样绑定到admin后不会随着admin的值显示 在value加上 : 后成功显示

Spring Cloud Gateway详细介绍简单案例

文章目录 1、Spring Cloud Gateway 详细介绍1.1. 统一入口&#xff08;Single Entry Point&#xff09;1.2. 请求路由&#xff08;Request Routing&#xff09;1.3. 负载均衡&#xff08;Load Balancing&#xff09;1.4. 流量控制&#xff08;Rate Limiting&#xff09;1.5. 身…

Msys2安装编译Redis

此处注意文件夹的权限问题&#xff0c;将文件夹的只读属性取消&#xff0c;否则在编译的时候会提示没有权限。首先&#xff0c;进入 msys2 所在目录的 usr/include/ 下&#xff0c;找到 dlfcn.h &#xff0c;复制站贴做个备份。然后打开 dlfcn.h &#xff0c;找到 Dl_info定义的…

SHELL 三剑客

grep awk sed grep grep通常和管道符|一起使用&#xff0c;对管道符前面数据进行对应处理 其命令参数包括 -v 过滤指定内容 -i 不区分大小写 -c 统计匹配行号 -n 带行号可以参考下图数据 awk awk 简单来说awk就是把文件逐行的读入&#xff0c;以空格为默认分隔符将每行切…

【云原生】docker 搭建单机PostgreSQL操作详解

目录 一、前言 二、前置准备 2.1 服务器环境 2.2 docker环境 三、docker安装PostgreSQL过程 3.1 获取PostgreSQL镜像 3.2 启动容器 3.2.1 创建数据卷目录 3.2.2 启动pg容器 3.3 客户端测试连接数据库 四、创建数据库与授权 4.1 进入PG容器 4.2 PG常用操作命令 4.2…

645.错误的集合

import java.util.HashMap; import java.util.Map;/*** program: Test* description: 645 错误的集合* author: gyf* create: 2025-03-23 10:22**/ public class Test {public static void main(String[] args) {}public static int[] findErrorNums(int[] nums) {int[] arr n…

向量数据库学习笔记(2) —— pgvector 用法 与 最佳实践

关于向量的基础概念&#xff0c;可以参考&#xff1a;向量数据库学习笔记&#xff08;1&#xff09; —— 基础概念-CSDN博客 一、 pgvector简介 pgvector 是一款开源的、基于pg的、向量相似性搜索 插件&#xff0c;将您的向量数据与其他数据统一存储在pg中。支持功能包括&…

Unity编辑器功能及拓展(3) —[Attribute]特性

在 Unity 中&#xff0c;[Attribute]格式的特性是用于扩展编辑器功能、控制序列化行为和调整 Inspector 显示,进行编辑器拓展的核心工具。 一.基础编辑器拓展 1.基础序列化控制 1.[SerializeField] 强制显示私有变量到Inspector 2.[HideInInspector] 隐藏该字段在Inspect…

探究 CSS 如何在HTML中工作

2025/3/28 向全栈工程师迈进&#xff01; 一、CSS的作用 简单一句话——美化网页 <p>Lets use:<span>Cascading</span><span>Style</span><span>Sheets</span> </p> 对于如上代码来说&#xff0c;其显示效果如下&#xff1…

【docker】docker-compose安装RabbitMQ

docker-compose安装RabbitMQ 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09;2、启动mq3、访问mq4、查看服务器映射目录5、踩坑5.1、权限不足 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09; versi…

小红书xhs逆向算法还原(202503月更新)

今天闲着没事再来看下小红书&#xff0c;发现好像过不去了&#xff0c;解开base64看看 {"signSvn":"56","signType":"x2","appId":"xhs-pc-web","signVersion":"1","payload":&qu…

全国产1U机架式交换机解决方案

规格参数 基本参数信息 基本信息 端口规格 32个10/100/1000Base-T RJ45接口&#xff0c;8个1G/10Gig SFP Console管理端口&#xff0c;RJ45&#xff0c;数量&#xff1a;1 支持1个USB接口&#xff0c;1个复位按键 外形尺寸 482 mm&#xff08;长&#xff09; 300mm &#…

【8】递归之经典题型总结

&#x1f4da;博客主页&#xff1a;代码探秘者 ✨专栏&#xff1a;《JavaSe》 其他更新ing… ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;作者水平有限&#xff0c;欢迎各位大佬指点&…

JC4010快速入门

目录 一、硬件接线二、软件操作2.1、 设置2.2、 零点 校准2.3、闭环控制2.4、调整PI参数2.5、切换控制模式 三、CAN模块操作3.1、使用CANable3.2、发送指令3.3、其它 一、硬件接线 ZH1.5-6P 和 SH1.0-3P 端子定义如下&#xff1a; 红色接电源正极&#xff0c;黑色接电源负极&a…

基于Spring Boot的高校普法系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章&#xff1b; sfm重建的点云已经丢掉了尺度信息&#xff0c;并且坐标系跟图像数据有关(SFM初始化选择的图像)&#xff0c;所以如果想恢复物理真实尺度&#xff0c;以及在想要的视角下渲染&#xff0c;那么需要对尺度…

代码随想录day31 贪心part05

56.合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;in…