TLS—SRTP协议学习笔记

文章目录

  • 加密解密
  • OpenSSL
    • 概念
    • TLS
    • 原理
    • 使用
  • DTLS协议
    • DTLS握手协议
    • DTLS时序图
  • SRTP
  • libsrtp

加密解密

1、非对称加密

公钥上锁,私钥打开
私钥上锁,公钥打开

2、数字签名

创建摘要,与加密文件里的摘要进行匹配

3、数字证书

私有证书:

openssl req (请求创建证书)

  • x509——证书格式
  • days 3650——证书有效时间3650天
  • newkey rsa:1024——创建密钥,使用的算法rsa:1024
  • nodes——不加密
  • keyout server.key——密钥生成的文件
  • out server.cert——证书生成的文件

下图是常用的加密算法,前三种是创建摘要

TLS—SRTP协议学习笔记_第1张图片

OpenSSL

概念

开源的SSL,而SSL即 Secure Sockets Layer,网络套接字加上安全机制,如非对称加密

TLS

国际安全组织对SSL 3.0进行了标准化,重新更改了名字,于是成为了TLS,Transport Layer Security

TLS是基于TCP协议的,它有两个步骤:

  1. TLS握手协议:下图的创建SSL上下文、加载证书、私钥
  2. TLS记录协议:下图的创建SSL实例

原理

  • SSL_CTX:上下文,存放了版本、密钥、证书
  • SSL:代表一个SSL连接,需要把一个socket当做参数放进去绑定,用来传输数据
  • SSL_Write/SSL_Read:socket的读写函数

使用

TLS—SRTP协议学习笔记_第2张图片

DTLS协议

它是基于UDP协议的

WebRTC默认是aes 128加密算法

DTLS握手协议

利用了非对称加密算法

1、客户端先发送Hello

注:这里的客户端并不是指真正的客户端,实际上哪边先发送Hello哪边就被称作客户端

2、服务端回复Hello,并发送自己的证书、私钥

3、客户端回复证书、私钥,并发送加密套件

4、服务端确认加密套件

TLS—SRTP协议学习笔记_第3张图片

DTLS时序图

第一步:媒体协商,交换SDP,其最重要的是ICE中的usr_name和password

第二步: STUN协议的Request,也是发送usr_name和password,然后对方会把收到的usr_name和password与媒体协商中获得的usr_name和password进行对比;若一致的便是合法用户,便会回复Response

第三步:现在才是DTLS四次握手

第四步:互相发送SRTP数据,SRTP是加密后的RTP数据

TLS—SRTP协议学习笔记_第4张图片

SRTP

SRTP的协议头和RTP相同,故头部不加密,在payload里面才会加密

在WebRTC中,一般不用MKI(must K indicate,主K标识符),所以为0

Authentication Tag:用来进行完整性验证。发送端将RTP数据头与RTP的加密数据做一次哈希函数运算,计算出摘要,附加在加密数据尾部。接收端收到后会再一次把数据头和加密数据做相同的哈希运算,若得出的结果与摘要匹配,才会进行数据解密

TLS—SRTP协议学习笔记_第5张图片

两个功能:

  • 保证数据完整性
  • 对数据加密解密

libsrtp

思科开源的一个srtp库,对性能优化得非常棒,损耗可以忽略不记

市面上所有开源的WebRTC流媒体服务器都使用的libsrtp,它用起来也很简单方便

下图是使用libsrtp的过程

TLS—SRTP协议学习笔记_第6张图片

第一步:对libsrtp做初始化

第二步:创建Session,在DTLS握手之后,拿到SSL实例(握手交换的信息都在里面,包括profile里的加密算法、密钥等),把这些信息都设置到Session中便能进行对数据的加密解密。注意:在流媒体服务器中创建的Session有两个,分别用于输出流和输入流,对输出流加密,输入流解密

第三步:加密和解密

另外有个博主的文章也写得不错:SSL/TLS/DTLS对比

你可能感兴趣的:(TLS—SRTP协议学习笔记)