zoukankan      html  css  js  c++  java
  • SRS4.0之RTMP转WebRTC06 ---- DTLS协议

    角色协商

    对于DTLS来说,有Client和Server之分,这里主要是通过sdp来协商的。

    offer:
    a=fingerprint:sha-256 D4:50:20:EA:EE:A6:86:59:77:3B:88:84:95:69:8A:AE:79:1A:C0:35:D9:25:EE:3F:0E:02:CB:2B:AF:99:F5:9E
    a=setup:actpass
    answer:
    a=fingerprint:sha-256 06:5D:44:D5:6A:62:A9:2E:5F:C5:5E:1E:99:3A:9F:11:20:7B:71:B1:D3:DF:CA:70:2D:82:0F:7D:AC:DC:0C:CC
    a=setup:passive

    setup:

    1. active,作为client,主动发起协商
    2. passive,作为server,等待发起协商
    3. actpass,作为client,主动发起协商;作为server,等待发起协商

    fingerprint:证书的摘要签名,用来验证证书使用,DTLS收到证书后,基于相同的hash计算哈希值,同fingerprint比较,相等,则说明证书有效。

    DTLS握手过

    过程和TLS总体差不多,目的就是交换对称秘钥,实现后面的加密。

    具体可以参考:https://mp.weixin.qq.com/s/tHW6sWRZUzkOtl2BsRbV1w

    1. ClienHello 和 ServerHello :协商DTLS 的 Version、CipherSuites、Random、以及 Extensions

     Version:DTLS 1.2

    CipherSuites: TLS_ECDHE_RSA_WITH_AES_128_GSM_SHA256

      TLS:协议

      ECDHE:秘钥交换

      RSA:对消息摘要使用私钥RSA加密生成数字签名,客户端使用公钥解密

      AES_256_GSM:对称加密算法,最终数据交换使用对称加密

      SHA256:对个人信息和公钥进行HASH算法生成信息摘要

    Random: aa2425b20f7cf9fcc72d9a031b4374c2c597e57832b62f1b59fa75c332f711aa

      双方的随机数,参与到生成 MasterSecret。MasterSecret 会用来生成主密钥,导出 SRTP 密钥。详见 [导出 SRTP 密钥]

    2. 身份验证-Certificate

     

    Certificate: 308201153081bda00302010202045d24d118300906072a8648ce3d040130143112301006… (id-at-commonName=ossrs.net)

    这里证书通过sha256之后等于sdp里面的fingerprint,这里是自签名证书,通过这个来保证安全

     3. 密钥交换-KeyExchange

    ServerKeyExchange和ClientKeyExchange,双方互相交换公钥,然后生成共享密钥。

    4. 证书验证 - CertificateVerify

    使用 ClientRequest 中描述的 Hash/Signature 算法,对收到和发送的 HandShake 消息签名发送个 Server。Server 端对签名进行校验。

    5. 加密验证 - Finished

    当 Server 和 Client 完成对称密钥的交换后,通过 ChangeCipherSpec 通知对端进入加密阶段,epoch 加 1。

    随后 Client 使用交换的密钥,对 "client finished" 加密,使用 Finished 消息,发送给服务端。Server 使用交换的密钥,对 "server finished" 进行加密发送给客户端。一旦验证了 finished 消息后,就可以正常通信了。

     SRS握手过程

    1. 初始化:收到/rtc/v1/play/后,创建SrsDtls

    2. 握手:SrsDtlsImpl::do_handshake()

    3. 握手结束:SrsDtlsServerImpl::on_handshake_done()

    参考:

    1.详解 WebRTC 传输安全机制:一文读懂 DTLS 协议

  • 相关阅读:
    CSRF攻击与防御
    nmap报错: Failed to open device ethxxx
    谷歌黑客语法(google hacking)让你的搜索更精准有效
    查看CPU相关信息
    使用fiddler抓取jmeter发送的请求
    20191129字符串对齐方法
    20191126拼接字符串
    robotframework 模拟滚动鼠标到底部
    SQL中的左连接与右连接,内连接有什么区别
    robotframework 获取坐标
  • 原文地址:https://www.cnblogs.com/vczf/p/15396199.html
Copyright © 2011-2022 走看看