DTLS

 DTLS协议层次:可分为两层:handshake layer--record layer--udp handshake layer:第二 层:为高层协议提供数据封装、压缩、加密等基本功能的支持。 Record Layer:第一层: 为每条信息提供一个header和在尾部生成一个从Message Authentication Code (MAC) 得到的hash值,其中header由5 bytes组成,分别是:协议说明(1bytes),协议版本(2bytes),长度(2bytes)  跟在header后面的协议信息长度不得超过16384bytes。 加密:握手协商加密master key;record层仅仅加上header,尾部加上校验和。UDP的socket接口,发送给另一方 解密:先解密后提取正。

dtls单向认证(handshake)

DTLS  handshake message steps and goal
1. client hello:  SSL/TLS 版本列表,32字节的随机数A(时间戳+随机数),加密方式(PSK或者ECC)和压缩方式.
2. server hello:协商采用的SSL/TLS版本号;32字节的随机数B;server选中的会话的加密方式和压缩方式.
3  ServerCertificates: 服务端数字证书serverCA(包含公钥) 发给client ServerHelloDone.
4. client key exchange:客户端校验服务端的数字证书;校验通过之后发送随机数C,该随机数称为pre-master-key,使用数字证书中的公钥加密后发出.
5  服务端校验客户端的证书,并用私钥将客户端加密的premaster 解密;
6. client:change ciper spec:告知Server端已经切换到之前协商好的加密套件,准备使用之前协商好的加密套件加密数据并进行传输 7 server: change ciper spec: 同理
8  client finish 根据随机数A/B/C(pre-master-key) 产生动态** master-key,用master-key加密一个finish 消息发至server;
9. server finish同理.
10. 服务端和客户端分别解密成功,至此握手完成,之后的数据包均采用master-key进行加密传输。 other: 如果发送方本来是连续发送几条消息,这几条消息就可以合并为一条,比如 serverHello, Certificate, ServerHelloDone. notes:**生成算法:rsa就是3个随机数组合,DH方法就是Q=b*A=b*(a*G)=(b*a)*G=(a*b)*G=a*(b*G)=a*B=Q' 简单过程总结:client发给server随机数A,server 发给client随机数B和server公钥,client用server公钥加密随机数C发给server. 双方都用这3个随机数生成**,即对称** 抓包分析各个steps:https://www.freebuf.com/articles/network/116497.html.

双向认证

双方认证和单向认证是类似,只是多了client 证书验证和client公钥加密传输加密算法选择.

bio and ssl

1 bio 作用: 加密的数据包传入bio,然后bio传入ssl解密. 2 ssl ssl 可以对数据包加密解密. ssl 可以连接socket 或者bio。 janus因为ice使用socket,所以ssl不能使用ssl socket函数,只能用bio接口. 3 dtls 与ice: notes:dtls 和 srtp 的数据包都是通过相同ice的udp连接进行传输的 dtls 与sdp: sdp交换在ice 处理过程中进行 SDP描述: 使用DTLS的方式来握手的时候SDP中会有:'a=fingerprint:' or 'a=crypto:' 4 dtls and ssl 区别? dtls主要是handshake. handshake 中的**生成算法是ecdh. ssl 使用dtls中生成的**,通过aes算法,将rtp变成srtp. janus 是将handshake中存入ssl上下文的**,profile(**长度)读取出来. janus没有使用ssl加解密, 而是通过libsrtp使用**加解密.