自学 websocket(三):详解 websocket security

这篇具有很好参考价值的文章主要介绍了自学 websocket(三):详解 websocket security。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

详解 websocket security


当我们需要在网络中传输敏感数据时,使用加密协议保护数据的安全性是非常必要的。其中,wss协议就是在websocket协议上添加加密层的一种协议。下面详细介绍wss协议的流程。

1 wss协议的总体流程

  1. 客户端请求建立wss连接 客户端通过发送一个HTTP请求来请求建立wss连接。
    • 这个请求头的格式与websocket协议基本相同,但是将ws改为了wss,同时添加了一些额外的请求头用于加密通信。
    • 例如:
GET wss://example.com/ HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
  1. 服务端响应并协商加密方式 服务端收到客户端的请求后,会回复一个类似于以下的HTTP响应头:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
  • 其中,Sec-WebSocket-Accept是服务端根据客户端发送的Sec-WebSocket-Key计算出的一段值,用于验证客户端的身份和确认握手成功。
  • 同时,服务端会在Sec-WebSocket-Protocol中告诉客户端使用的子协议,这个子协议需要在之后的通信中进行约定。
  1. 建立加密通信通道 建立连接后,双方将通过TLS/SSL协议建立一个安全的通道,以保证后续的通信数据的加密和解密过程。

    • TLS/SSL协议的实现使用了非对称加密算法和对称加密算法,来保证通信的机密性、完整性和可信度。
  2. 发送和接收数据 在建立加密通道后,客户端和服务端就可以通过发送WebSocket数据帧来进行通信。在wss协议中,所有传输的数据都是经过加密处理的,以确保数据的机密性。

总的来说,wss协议与websocket协议类似,但是添加了TLS/SSL加密层,提供了更高的安全性和保密性。在实际应用中,通常使用的加密算法包括AES、RSA、SHA等,以及TLS/SSL协议。

2 TLS/SSL 加密层的详细流程

  • SSL握手 当客户端向服务端发起请求时,会首先进行SSL握手。SSL握手分为四个步骤:

    1. 第一步:客户端向服务端发送Hello请求,包含客户端支持的SSL/TLS协议版本号、加密算法等信息。
    2. 第二步:服务端向客户端发送Hello响应,包含服务端选择的SSL/TLS协议版本号、加密算法等信息。
    3. 第三步:服务端向客户端发送证书,包含服务端的公钥和证书信息。
    4. 第四步:客户端验证证书并向服务端发送一个随机数,同时使用服务端的公钥进行加密。服务端使用自己的私钥解密这个随机数,并使用客户端随机数和服务端随机数进行加密,然后发送给客户端。
  • 在SSL握手的过程中,客户端和服务端协商选择TLS/SSL协议的版本、加密算法等信息,并交换证书和随机数,以建立一个安全的通信通道。

  • 加密通信 在SSL握手完成后,客户端和服务端就可以进行加密通信了。在加密通信过程中,TLS/SSL协议使用的加密算法包括对称加密算法和非对称加密算法。

  • 数据传输 在TLS/SSL协议的加密通道建立之后,客户端和服务端就可以开始进行数据传输了。

  • 在数据传输过程中,TLS/SSL协议使用的数据格式是SSL记录协议格式

    • 每个SSL记录协议格式包含一个记录头和一个负载。
    • 记录头包含协议版本、记录类型、负载长度等信息。
    • 负载则是要传输的数据。
    • 在传输数据时,TLS/SSL协议使用对称加密算法对数据进行加密,确保数据的安全性和机密性。
两种加密算法
  • 对称加密算法:使用相同的密钥进行加密和解密,速度较快,但密钥需要安全地交换。
  • 非对称加密算法:使用公钥进行加密,使用私钥进行解密,速度较慢,但安全性较高,不需要交换密钥。

在加密通信过程中,TLS/SSL协议使用的加密算法包括RSA、AES、SHA等。

3 如何使用python编程来模拟TLS/SSL加密层的流程

服务器端

首先,我们需要在服务器端创建一个SSL server,用于监听客户端的连接请求,并使用证书和私钥对连接进行加密。代码如下:

import asyncio
import ssl

# 服务器证书和私钥路径
CERTFILE = "server.crt"
KEYFILE = "server.key"

async def handle_client(reader, writer):
    # 读取客户端发送的数据
    data = await reader.read(1024)

    # 解密数据
    print(data.decode())

    # 向客户端发送数据
    writer.write("Hello, World!".encode())
    await writer.drain()

    # 关闭连接
    writer.close()

async def run_server():
    # 创建一个SSL server,使用证书和私钥进行加密
    ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    ssl_context.load_cert_chain(CERTFILE, KEYFILE)

    # 监听客户端连接请求
    server = await asyncio.start_server(handle_client, 'localhost', 8888, ssl=ssl_context)

    async with server:
        await server.serve_forever()

asyncio.run(run_server())
客户端

在客户端,我们需要创建一个SSL connection,使用服务器端的证书进行加密,并向服务器端发送数据。代码如下:

import asyncio
import ssl

# 服务器证书路径
CERTFILE = "server.crt"

async def run_client():
    # 创建一个SSL connection,使用服务器端的证书进行加密
    ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    ssl_context.load_verify_locations(CERTFILE)

    reader, writer = await asyncio.open_connection('localhost', 8888, ssl=ssl_context)

    # 向服务器端发送数据
    writer.write("Hello, World!".encode())
    await writer.drain()

    # 读取服务器端返回的数据
    data = await reader.read(1024)

    # 解密数据
    print(data.decode())

    # 关闭连接
    writer.close()

asyncio.run(run_client())
  • 上述代码中,我们使用了asyncssl模块创建了一个SSL connection,用于加密通信。
  • 其中,ssl_context对象用于设置SSL选项,包括证书和私钥、验证服务器端证书等。在客户端中,我们使用了load_verify_locations函数来指定服务器端的证书路径。
  • 当客户端连接服务器端时,SSL connection会对证书进行验证,确保连接的安全性。

总的来说,使用Python3.10实现TLS/SSL加密通信是非常方便的。我们只需要使用asyncssl模块创建一个SSL connection,然后像普通的socket一样进行数据传输即可。

4 涉及TLS/SSL加密层的步骤详解

  1. 客户端发送ClientHello消息,其中包含客户端支持的加密算法列表。
    • 在这一步中,客户端使用自己的随机数、支持的加密算法列表等信息生成一个随机数并将其使用服务器端公钥进行加密,以保证消息的机密性。
  2. 服务器端接收到ClientHello消息后,会从中选择一种加密算法,并将其发送给客户端。
    • 在这一步中,服务器端使用自己的随机数、选择的加密算法等信息生成一个随机数并将其使用客户端公钥进行加密,以保证消息的机密性。
  3. 客户端接收到服务器端选择的加密算法后,会生成一个预主秘钥,并将其使用服务器端公钥进行加密,以保证消息的机密性。然后,客户端会发送一个ClientKeyExchange消息,其中包含加密后的预主秘钥。
  4. 服务器端接收到ClientKeyExchange消息后,会使用自己的私钥进行解密,并得到预主秘钥。
    • 然后,服务器端使用预主秘钥生成主秘钥,并使用主秘钥对通信过程中的所有数据进行加密和解密。
  5. 客户端发送ChangeCipherSpec消息,通知服务器端从此之后的所有数据都将使用主秘钥进行加密和解密。
  6. 服务器端接收到ChangeCipherSpec消息后,也会通知客户端从此之后的所有数据都将使用主秘钥进行加密和解密。

在这些步骤中,涉及到加密的内容主要包括随机数、预主秘钥等。

  • 具体来说,客户端使用服务器端公钥对自己生成的随机数进行加密
  • 服务器端使用客户端公钥对自己生成的随机数和选择的加密算法进行加密
  • 客户端使用服务器端公钥对预主秘钥进行加密
  • 而服务器端则使用自己的私钥对加密后的预主秘钥进行解密。

在完成加密过程后,TLS/SSL协议会使用主秘钥对通信过程中的所有数据进行加密和解密。因此,所有的数据都将被加密保护,只有拥有主秘钥的客户端和服务器端才能对其进行解密。文章来源地址https://www.toymoban.com/news/detail-714109.html

到了这里,关于自学 websocket(三):详解 websocket security的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MobileNet系列(4):MobileNetv3网络详解

    当前很多轻量级网络会经常使用到 MobileNetv3 ,本文将讲解google继 MobileNetv2 之后提出的v3版本。 MobileNetv3论文 :Searching for MobileNetV3 根据MobileNetV3论文总结,网络存在以下3点需要大家注意的: 更新了Block(bneck) ,在v3版本中原论文称之为 bneck ,在v2版 倒残差结构 上进行了简单的

    2024年02月06日
    浏览(54)
  • 【分布式websocket】聊天系统消息加密如何做

    前言 先介绍一下对称加密算法,在介绍一下加密流程,然后是介绍一下查询加密消息的策略。然后结合现有技术架构然后去选型。 决定采用客户端解密。简而言之就是采用对称服务端加密。然后将加密内容存储到消息表的content字段。然后客户拉取content字段 然后解密。拉取

    2024年04月14日
    浏览(39)
  • 【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络

    🌈个人主页:  Aileen_0v0 🔥系列专栏:  一见倾心,再见倾城  ---  计算机网络~ 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 目录 码元  速率和波特 思考1   思考2  思考3 带宽(Bandwidth)  📝总结 码元 是指用一个 固定时长的信号波形 _(数字脉冲),代表不同离散数值的基本波

    2024年02月04日
    浏览(55)
  • MobileNet系列(2):MobileNet-V2 网络详解

    MobileNet-V2论文:Inverted Residuals and Linear Bottlenecks, MobileNet-V2网络是由google团队在2018年提出的,相比MobileNetV1网络, 准确率更高,模型更小 。 网络中的亮点 Inverted Residuals (倒残差结构) Linear Bottlenecks 普通的残差结构 Resnet 网络提供的残差结构,如下图: 首先对输入特征矩阵

    2024年02月05日
    浏览(36)
  • WebSocket 安全与加密:TLS 和 DTLS 的应用

    WebSocket 是一种基于 TCP 的协议,用于建立持久性的双向通信通道。它主要应用于实时通信,如聊天、游戏、实时数据推送等。然而,WebSocket 协议本身并不提供安全性和加密功能,这导致了一些安全问题。因此,需要在 WebSocket 协议上加入安全机制,以保护数据的完整性、机密

    2024年02月20日
    浏览(24)
  • 【YOLO系列】YOLOv5超详细解读(网络详解)

    吼吼!终于来到了YOLOv5啦! 首先,一个热知识:YOLOv5没有发表正式论文哦~ 为什么呢?可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧,hh 前言 一、YOLOv5的网络结构  二、输入端 (1)Mosaic数据增强 (2)自适应锚框计算 (3)自适应图片缩放 三、Backbone (1)Focus结构 (2)CSP结构

    2023年04月09日
    浏览(69)
  • Linux 网络通信epoll详解( 10 ) -【Linux通信架构系列 】

    C++技能系列 Linux通信架构系列 C++高性能优化编程系列 深入理解软件架构设计系列 高级C++并发线程编程 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. (1)I/O多路复

    2024年02月16日
    浏览(47)
  • 【YOLO系列】YOLOv4论文超详细解读2(网络详解)

     上一篇我们一起读了YOLOv4的论文《YOLOv4:Optimal Speed and Accuracy of Object Detection》(直通车→【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)),有了初步的印象,论文里面涉及到很多tricks,上一篇介绍的比较简略,我们这篇来详细介绍一下。 一、YOLOv4的简介  二、YO

    2024年02月02日
    浏览(42)
  • 基于netty框架不使用SSL证书,实现websocket数据加密传输

    1、简介 2、实现方式 3、服务端主要代码 4、客户端主要代码 5、调用方式 为什么不使用SSL证书? 1、服务器运行在专网环境,不能访问互联网。证书有有效期,CA机构规定,证书有效期最多2年。在客户的专网环境里更新和维护证书就会增加运营成本。 实现逻辑? 参照SSL的实

    2024年02月04日
    浏览(52)
  • 深入浅出 Yolo 系列之 Yolov7 基础网络结构详解

    从 2015 年的 YOLOV1 ,2016 年 YOLOV2 , 2018 年的 YOLOV3 ,到 2020 年的 YOLOV4 、 YOLOV5 , 以及最近出现的 YOLOV76 和 YOLOV7 可以说 YOLO 系列见证了深度学习时代目标检测的演化。对于 YOLO 的基础知识以及 YOLOV1 到 YOLOV5 可以去看大白的 YOLO 系列,本文主要对 YOLOV7 的网络结构进行一个梳理

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包