16 DTLS协议

加密解密基本概念

什么是非对称加密

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

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

数字签名

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

数字证书

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pikachu靶场上的暴力破解

目录 一、暴力破解 基于表单的暴力破解 验证码绕过(on server) ​编辑 验证码绕过(on client) ​编辑 token防爆破? 二、暴力破解的相关知识点 (1)Burte Force&#xff08;暴力破解&#xff09;概述 (2)验证码的绕过原理 【验证码机制原理】 【客户端可能存在的安全…

智能型程控直流电子负载的介绍

智能型程控直流电子负载是一种高精度、高稳定性的电子设备&#xff0c;主要用于模拟各种实际负载情况&#xff0c;对电源设备进行测试和调试。它能够精确控制电流、电压、功率等参数&#xff0c;以满足不同应用场景的需求。 智能型程控直流电子负载的主要特点有以下几点&#x…

连接查询-外连接(FULL JOIN)、内连接(JOIN)、自身连接

一、表与表之间存在着某种联系&#xff0c;如果一个查询必须在多个表之间完成&#xff0c;则需要用到连接查询 二、连接查询的SQL查询语句 格式&#xff1a; SELECT A1&#xff0c;A2&#xff0c;...&#xff0c;Am FROM R1&#xff0c;R2&#xff0c;..&#xff0c;Rn WH…

推荐这3个APP,帮助你成长

扇贝阅读 当年考英语四级&#xff0c;扇贝阅读帮了很大的帮&#xff0c;这个应用我推荐给了好多同学使用&#xff0c;大家一致反馈不错。 提供很多原版的英文原著供学习&#xff0c;还自带翻译功能&#xff0c;并且提供单词本&#xff0c;遇到不懂的单词可以纪录到单词本中&am…

车载网络安全指南 网络安全框架(二)

返回总目录->返回总目录<- 目录 一、概述 二、网络安全组织管理 三、网络安全活动 四、支撑保障 一、概述 汽车电子系统网络安全活动框架包含汽车电子系统网络安全活动、组织管理以及支持保障。其中,网络安全管理活动是框架的核心,主要指汽车电子系统生命周期各阶段…

Day 14:2938. 区分黑球和白球

Leetcode 2938. 区分黑球和白球 桌子上有 n 个球&#xff0c;每个球的颜色不是黑色&#xff0c;就是白色。 给你一个长度为 n 、下标从 0 开始的二进制字符串 s&#xff0c;其中 1 和 0 分别代表黑色和白色的球。 在每一步中&#xff0c;你可以选择两个相邻的球并交换它们。 返…

E10:流程明细表表单字段值变化触发事件

效果– //window.WeFormSDK.showMessage("这是一个E10的提示", 3, 2);// 获取表单实例const weFormSdk window.WeFormSDK.getWeFormInstance();// 获取主表字段fieldIdconst bt weFormSdk.convertFieldNameToId("bt");const lcbh weFormSdk.convertFi…

第五讲:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

51单片机驱动控制彩屏系列讲座 第一讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏【 源码v1.0 】 第二讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码移植介绍 第三讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码的压缩&#xff08;Keil编译器&#xff09; 第…

C++ 中的负无穷大赋值

1&#xff0c;代码先行 示例&#xff1a; #include<iostream> #include<limits>using namespace std;int main() {float inf_pos numeric_limits<float>::infinity();float inf_neg -1*inf_pos;cout << "inf_pos " << inf_pos &l…

揭秘:消费1000,竟能领回2000?每天还有额外收入?

大家好&#xff0c;我是吴军&#xff0c;今天将为大家揭秘一种令人眼前一亮的商业模式——循环购模式。你可能会问&#xff0c;消费1000元&#xff0c;商家却送出了2000元的“好处”&#xff1f;每天还有钱领&#xff0c;这些钱还能提现&#xff1f;这究竟是怎么一回事&#xf…

[13] CUDA_Opencv联合编译过程

CUDA_Opencv联合编译过程 详细编译过程可见我之前的文章&#xff1a;Win10下OpencvCUDA联合编译详细教程&#xff08;版本455、460、470,亲测可用&#xff01;&#xff01;&#xff01;&#xff09;本文给出Windows\linux下的opencvcuda的编译总结&#xff0c;摘自 <基于GP…

CNS-BL30H系列直流无刷电机驱动器|电机参数配置方法

CNS-BL30H系列直流无刷电机驱动器|电机包含CNS-BL30HB、CNS-BL30HDN、CNS-BL30HSN&#xff0c;采用一驱二设计&#xff0c;可以同时驱动两个小于48V/1000W的直流无刷电机&#xff0c;体积小巧&#xff0c;安装方便&#xff0c;接线快捷&#xff0c;本文重点介绍CNS-BL30H系列直…

23种设计模式之组合模式

组合模式 1、定义 组合模式&#xff1a;组合多个对象形成树状结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象 2、组合模式结构 Component&#xff08;抽象构件&#xff09;&#xff1a;可以是接口或抽象类&#xff0c;为叶子构件…

时序分解 | Matlab实现SCSSA-VMD融合正余弦和柯西变异的麻雀搜索算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现SCSSA-VMD融合正余弦和柯西变异的麻雀搜索算法优化变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现SCSSA-VMD融合正余弦和柯西变异的麻雀搜索算法优化变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab…

Spring—bean

一、bean的作用域 单例 默认化为&#xff1a;单例&#xff08;singleton&#xff09; SpringBean类&#xff1a; package com.hei.bean; public class SpringBean { public SpringBean(){System.out.println("Springbean的无参数构造方法执行了"); } } spring,xml…

网络安全领域国内外有哪些法律法规?

1. 中国 1.中华人民共和国网络安全法&#xff08;简称网安法&#xff09; 生效时间&#xff1a;2017年6月1日主要内容&#xff1a;规范网络运营行为&#xff0c;维护网络安全&#xff0c;保护国家安全和公共利益&#xff0c;以及保护公民、法人和其他组织的合法权益。 2.中华…

CMA、CNAS软件检测报告如何收费?软件测评中心出具报告需多久?

众所周知&#xff0c;各行各业都需要资质认证&#xff0c;正如教师会有教师资格证&#xff0c;医师会有医师资格证&#xff0c;律师会有律师证&#xff0c;软件产品亦如此。对于软件测试报告来说CMA和CNAS资质认证就是获得行业甚至国家认可的重要依据。 CMA和CNAS软件检测报告…

将对象序列化到文件

ObjectOutputStream可以将一个内存中的Java对象通过序列化的方式写入到磁盘的文件中。被序列化的对象必须要实现Serialzable序列化接口&#xff0c;否则会抛出异常。 创建对象 public class Users implements Serializable {private int userid;private String username;priv…

C++和C语言到底有什么区别?

引言&#xff1a;C和C语言是两种非常常见的编程语言&#xff0c;由于其广泛的应用和灵活性&#xff0c;它们在计算机科学领域内受到了广泛的关注。虽然C是从C语言发展而来的&#xff0c;但是这两种语言在许多方面都有所不同。本文将对C和C语言进行比较和分析&#xff0c;以便更…

C++中的结构体——结构体中const的使用场景

作用&#xff1a;用const来防止误操作 示例 运行结果