16 DTLS协议

news2024/10/7 14:53:21

加密解密基本概念

什么是非对称加密

  • 什么是公钥
    这个就是谁都能获得的钥匙
  • 什么是私钥
    只有一个人能获得

非对称加密就是公钥上的锁,私钥才能打开,私钥上的锁公钥才能打开。比如说就是地下党接头的时候,把一个信息放在盒子里,然后这个盒子只有我能打开,这个盒子谁都可以放信息,但是只有要接收信息的那个人能打开。

数字签名

这样也不是安全的,因为如果那个人被逮住了,别人可以冒充公钥来骗别人。这就是数字签名的作用。
数字签名是一种用于验证电子文档或数据的身份和完整性的技术。数字签名实际上是一种数学算法,它使用一个私有密钥来加密文件的数字摘要,并将其附加到文件中,形成数字签名。数字摘要是根据文件内容计算出来的唯一字符串,任何对文件的修改都会改变数字摘要。数字签名的接收方可以使用公共密钥来解密数字签名,并使用相同的算法计算文件的数字摘要,然后将两个数字摘要进行比较。如果数字摘要匹配,接收方就可以确定文件没有被篡改,并且数字签名的私有密钥的持有者确实是文件的签署者。数字签名常用于保护电子邮件、文档、软件等的安全性和完整性,以及验证数字证书的有效性。

数字证书

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构–CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

私有证书

在这里插入图片描述
-x:证书的格式,509最有名
-days:有效多少天
-newdey rsa:1024:是否有密钥,没有就生成一个
-nodes:不加密
-keyout server.key:生成密钥文件
-out server.cert:证书名字

常用加密算法

在这里插入图片描述

OpenSSL

  • 什么是OpenSSL
    就是开源的SSL
  • SSL , Secure Sockets Layer
    这个就是安全套接字层
  • TLS,Transort Layer Security
    标准化,传输层安全协议

TLS协议

TLS握手协议
TLS 记录协议

OpenSSL原理

OpenSSL 采用了多种密码学算法和协议来实现其安全功能。它支持各种对称密码算法,如 AES、DES 和 Blowfish,用于加密和解密数据。此外,它还支持非对称密码算法,如 RSA 和 DSA,用于生成公钥和私钥,并进行数字签名和验证。OpenSSL 还支持 SSL/TLS 协议,用于在网络通信中建立安全连接。
SSL_CTX
SSL:代表一SSL 连接
SSL_Write/SSL_Read

如何使用OpenSSL原理

链接
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <openssl/ssl.h>

int main() {
    // 初始化 OpenSSL
    SSL_library_init();

    // 创建 SSL 上下文
    SSL_CTX *ctx = SSL_CTX_new(SSLv23_client_method());
    if (ctx == NULL) {
        printf("Failed to create SSL context.\n");
        return 1;
    }

    // 加载服务器证书
    if (SSL_CTX_use_certificate_file(ctx, "server.crt", SSL_FILETYPE_PEM) != 1) {
        printf("Failed to load server certificate.\n");
        SSL_CTX_free(ctx);
        return 1;
    }

    // 加载服务器私钥
    if (SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM) != 1) {
        printf("Failed to load server private key.\n");
        SSL_CTX_free(ctx);
        return 1;
    }

    // 创建 SSL 对象
    SSL *ssl = SSL_new(ctx);
    if (ssl == NULL) {
        printf("Failed to create SSL object.\n");
        SSL_CTX_free(ctx);
        return 1;
    }

    // 设置连接套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        printf("Failed to create socket.\n");
        SSL_free(ssl);
        SSL_CTX_free(ctx);
        return 1;
    }

    // 连接服务器
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(443);
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        printf("Failed to connect to server.\n");
        SSL_free(ssl);
        SSL_CTX_free(ctx);
        return 1;
    }

    // 将 SSL 对象绑定到连接套接字
    SSL_set_fd(ssl, sockfd);

    // 建立 SSL 连接
    if (SSL_connect(ssl) <= 0) {
        printf("Failed to establish SSL connection.\n");
        SSL_free(ssl);
        SSL_CTX_free(ctx);
        return 1;
    }

    // 发送数据
    char message[] = "Hello, server!";
    SSL_write(ssl, message, strlen(message));

    // 接收数据
    char buffer[1024];
    SSL_read(ssl, buffer, sizeof(buffer));
    printf("Received: %s\n", buffer);

    // 关闭 SSL 连接
    SSL_shutdown(ssl);
    SSL_free(ssl);
    SSL_CTX_free(ctx);

    return 0;
}

DTLS协议

  • TLS是基于TCP协议的
  • DTLS基于UDP协议的
    DTLS(Datagram Transport Layer Security) 是基于 UDP 场景下数据包可能丢失或重新排序的现实情况下,为 UDP 定制和改进的 TLS 协议。在 WebRTC 中使用 DTLS 的地方包括两部分: 协商和管理 SRTP 密钥和为 DataChannel 提供加密通道。
    在这里插入图片描述

DTLS握手协议

这个是四次握手,具体可以看看这个链接
在这里插入图片描述

DTLS时序图

在这里插入图片描述
1.实际上在握手之前还需要做很多事情,其中之一就是交换SDP信息,也就是媒体协商(需要通过信令进行连接),其中也包含交换了ICE的password和username

2.经过1之后就找到对方的Candidate了,也就是相互知道了对方 的ip和端口使用的协议是什么。下面就是在数据传输之前首先发送STUN request 把password与username带给流媒体服务器,流媒体服务器将用户名密码取出来与第一阶段中的用户名密码比较是否是一致的,如果带过来的是一致的,那说明用户是合法的,就会返回一个连接成功的 响应。
3.客户端收到这个响应后就会进行DTLS的四次握手(传递证书,公钥,私钥, 加密算法)
4.握手后就开始传送数据

SDP中比较关键的信息
在这里插入图片描述

DTLS-SRTP(真正在webRTC使用的协议)

DTLS-SRTP是DTLS的一个扩展,将SRTP加解密与DTLS的key交换和会话管理相结合。从SRTP的角度看,是为其提供一种新的key协商管理的方法;从DTLS的角度看,是为应用数据提供一个新的数据格式(SRTP/SRTCP)。

1,应用层数据加解密是由SRTP完成的,要求必须是RTP/RTCP的格式。
2,DTLS的握手过程是为SRTP加解密过程协商使用哪种profile和密钥。
3,除了应用数据加密为SRTP格式,其他record-layer的报文仍为普通的DTLS格式(比如TLS control message)
4,当发送SRTP格式的应用层数据时,需要直接跳过DTLS加密层,将SRTP数据包透传到下层的数据传输层做发送。

由于密钥和加密参数是在DTLS握手过程中协商得到的,而此过程是保密的,因而相比常规的方式(比如在通过SDP消息交互来协商)更为安全。在发起DTLS握手之前,需要先设置use-srtp扩展。

接收端使用 DTLS-SRTP
自DTLS下层的传输层收到报文之后,需要根据包头特征手动区分做demultiplexing,一般可以如下进行
检查第一个报文的第一个字节
1,是[0, 1]时,表示可能是STUN报文
2,是[128, 191]时,表示可能时RTP(SRTP)报文
3,是[20, 63]时,表示可能是DTLS record layer报文
其他的类别请根据实际情况做区分处理

DTLS握手成功之后,需要导出key material,然后从中分离出server/client端用于SRTP对称加密的密钥。key material中对应SRTP的密钥,构成如下
client_master_key server_master_key client_salt server_salt
其中 master_key 和 salt 的长度是根据最终协商的 SRTP 的profile来确定的。

DTLS要解决的问题

  • 交换密钥
  • 确认加密算法

SRTP要解决的问题

对数据加密,保证数据安全
保证数据完整性
与普通的RTP头一样,头不加密,只有数据加密。
在这里插入图片描述

libsrtp

开源的库。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用映射对比ab俩个数组 , 并把a的参数传递给b

项目背景 : react ant 需求 : 在项目进行表头设置时,根据aaa中的key和bbb中的name对应 , 并将sort值插入到bbb中 其中 a b 结构如下 具体实现 aaa[ { key: "orderNumber", orderNumber: "工单编号", sort: 1 } ... ]bbb [ { name: "orderNumber…

白酒:茅台镇白酒的消费趋势与未来发展

茅台镇&#xff0c;中国白酒的璀璨明珠&#xff0c;以出产品质的白酒而享誉全球。在这片神奇的土地上&#xff0c;云仓酒庄豪迈白酒以其别具一格的酿造工艺和风格特点&#xff0c;成为了市场的宠儿。随着消费市场的不断变化&#xff0c;云仓酒庄豪迈白酒的消费趋势也在悄然发生…

有哪些指标体系搭建模型?五个步骤教你从0开始搭建指标体系

在当今的商业环境中&#xff0c;数据驱动决策已成为企业成功的关键因素。构建一个有效的指标体系是实现数据驱动的基石&#xff0c;它能够帮助企业明确业务目标、量化业绩表现、监控市场动态&#xff0c;并指导战略规划。一个精心设计的指标体系能够为企业提供一个全面的视图&a…

凡尔码来访登记卡助力来访安全

来访登记制度是指为了加强对来访人员的管理和安全控制&#xff0c;确保组织内部秩序和安全的一项制度。通过来访登记制度&#xff0c;可以对来访人员的身份进行核实&#xff0c;了解来访目的&#xff0c;并采取相应的安全措施&#xff0c;为组织内部的工作和人员安全提供保障。…

【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 对话框 | 创建自定义对话框 文章编号&#xff1a;Qt 学习笔记…

为什么代理IP都没有100%可用性?

在当今高度互联的网络环境中&#xff0c;代理IP已成为许多网络活动的重要支撑工具&#xff0c;从数据收集到业务推广&#xff0c;无所不包。然而&#xff0c;代理IP在很多场景中发挥着重要作用&#xff0c;却很难实现100%的可用性。 这种情况并非偶然&#xff0c;而是受到多重复…

【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 标准对话框 | 字体对话框QFontDialog 文章编号&#xff1a;Q…

IEOSE 2024北京国际教育留学海外院校展览会11月举办

IEOSE 2024北京国际教育留学展览会 IEOSE 2024 Beijing International Education and Overseas Study Exhibition 2024年11月15日-11月17日&#xff08;周五-周日&#xff09; 15th-17th November, 2024 北京国家会议中心 China National Convention Ce…

C# WPF 读写CAN数据

C# WPF 读写CAN数据 CAN 分析仪 分析仪资料下载 官方地址&#xff1a;https://www.zhcxgd.com/1.html CSDN&#xff1a; 项目配置 复制Dll库文件 文件在上面的资料里面 设置不安全代码 CAN C#工具类 CAN_Tool.cs using Microsoft.VisualBasic; using System; using Sys…

ASM-MehotdVisitor实践

使用ASM几乎用户全部的精力都是对MethodVisitor的处理&#xff0c;方法code的处理都需要使用这个类进行操作。还是之前文章说过的&#xff0c;ASM单独学习意义并不大&#xff0c;难以达到触类旁通&#xff0c;先行掌握字节码基础后再玩起ASM才能体会真正的乐趣&#xff0c;不然…

【Python】已解决TypeError: unsupported operand type(s) for ...报错方案合集

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

【Python】selenium 点击某个按钮 click() 出现的报错问题--ElementClickInterceptedException(全!)

写在前面&#xff1a; 我们在使用selenium 点击某个元素时或者获取find_element的某个网页元素时&#xff0c;总会遇到一些问题。本人经验是&#xff0c;最直接的方法是用try_except 报错&#xff0c;直接绕过问题&#xff0c;可以直接看第一条。如果有兴趣具体解决&#xff0c…

让你事半功倍的高效管理微信方法

随着私域运营的需求不断增长&#xff0c;对于使用微信进行运营的企业或个人来说&#xff0c;高效的管理微信变得越发重要&#xff0c;今天分享一些高效管理微信的实用方法&#xff1a;

图像的混合与渐进变换

1.实验目的 平常我们看到的美图秀秀等两个图片混合是怎么生成的呢&#xff0c;今天我们看看图像处理关于这部分怎么做的&#xff1f; 2.实验条件 pycharm python编译器 3.实验代码 # File: 图像混合与渐进变换.py # Author: chen_song # Time: 2024/6/11 下午6:08 "…

Java--三种初始化内存及内存分析

1.静态初始化&#xff1a;创建赋值 int[] a{1,2,3}; Man[] mans{new Man(1,1),new Man(2,2)}; 2.动态初始化&#xff1a;开辟新的存储空间 int[] anew int[2]; a[0]1; a[1]2; 3.默认初始化&#xff1a;数组是引用类型&#xff0c;他的元素相当于类的实例变量&#xff0c;因…

C++ 14 之 宏函数

c14宏函数.cpp #include <iostream> using namespace std;// #define PI 3.14 // 宏函数 // 宏函数缺陷1: 必须用括号保证运算的完整性 #define MY_ADD(x,y) ((x)(y))// 宏函数缺陷2&#xff1a;即使加了括号&#xff0c;有些运算依然与预期不符 #define MY_COM(a,b) ((…

调用腾讯智能云实现人脸融合

目录 1. 作者介绍2. 人脸识别内容介绍2.1 人脸识别简介2.2 技术原理 3. 实现流程及代码实现3.1 实现流程3.2 代码实现3.2.1 图片为url格式3.2.2 图片为base64格式 3.3 完整代码3.4 问题分析 1. 作者介绍 杨煜星&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c…

TextCtrl输入文本类

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 wx.StaticText类只能够用于显示纯粹的静态文本&#xff0c;但是有时需要输入文本与用户进行交互&#xff0c;此时&#xff0c;就需要使用wx.TextCtrl…

简单项目——前后端分离实现博客系统

文章目录 一、项目实现的准备工作二、数据库的设计以及构建三、封装数据库连接、创建实体类四、封装数据库的增删查改操作五、实现博客系统核心操作1.获取博客列表页2.获取博客详情页3. 实现博客登录页4. 实现所有页面检查并强制登录5.退出登录状态6. 实现博客发布7. 实现删除文…

线上观看人次2万+!「飞天技术沙龙-CentOS 迁移替换专场」北京站圆满结束

5 月 29 日&#xff0c;阿里云联合龙蜥社区共同举办的「飞天技术沙龙-CentOS 迁移替换专场」于北京圆满结束&#xff0c;在线观看人次 2 万。本次活动现场汇聚了来自浪潮信息、Intel、龙芯、统信软件、红旗软件、电子五所等多家操作系统产业头部企业和机构&#xff0c;大家围绕…