從零開始精通RTSP之加密

概述

????????原始的RTSP通信默認使用的是明文傳輸,這也就意味著,在網絡上的任何節點都能輕易地查看或修改傳輸的內容。這在涉及隱私或版權保護的場景下,是完全不可接受的。因此,加密顯得尤為重要。加密的目的主要有三點:一是進行身份驗證,確認通信雙方的身份;二是確保數據在傳輸過程中,不被未經授權的第三方讀取;三是保證數據的完整性,確保數據在傳輸過程中不被篡改。

????????為了加密傳輸信令和碼流,確保媒體數據的安全性,通常采取以下兩種策略:RTSP Over TLS、SRTP。

RTSP Over TLS

????????RTSP Over TLS是指在RTSP協議通信過程中,使用TLS(Transport Layer Security)協議或SSL(Secure Sockets Layer)協議對RTSP信令消息進行加密傳輸,以保護通信內容的安全性和隱私性。這類似于HTTPS對于HTTP的加密方式,提高了協議的安全等級。

????????實現RTSP Over TLS的大致步驟如下。

????????1、證書準備。我們需要為RTSP服務器配置一個有效的SSL/TLS證書,證書可以是從受信任的CA(Certificate Authority,證書頒發機構)購買的證書,也可以是自簽名證書(主要用于測試環境,生產環境不推薦)。

????????2、服務器配置。大多數現代的RTSP服務器軟件(比如:VLC、GStreamer等)都支持TLS加密,我們需要在服務器配置文件中指定證書和私鑰的路徑,并啟用TLS端口。TLS端口默認是443,也可以是其他端口,比如:554等。

????????3、客戶端連接。客戶端需要使用支持TLS的RTSP URL來發起連接請求,格式通常為:

????????????????rtsps://address:port/path

????????上面的“rtsps”表示安全連接,即TLS加密。

????????4、握手與驗證。連接建立過程中,客戶端與服務器會執行TLS握手,驗證服務器證書的有效性。如果證書被客戶端信任,則建立加密連接。否則,連接可能會失敗。

????????注意:默認的RTSP端口是554,但未指定是否加密。使用TLS時,通常建議使用443端口,這是TLS的標準端口。當然,也可以選擇其他端口,并明確告知客戶端。TLS加密會增加額外的CPU負載,尤其是在視頻流傳輸這樣對實時性要求較高的場景中,需要確保服務器有足夠的處理能力。另外,RTSP Over TLS只會對RTSP的信令進行加密,并不會對媒體流進行加密。

SRTP

????????對于媒體流的加密,最常用的是SRTP(Secure RTP)。SRTP是一種專為RTP設計的安全增強層協議,是對RTP協議的擴展,提供了對媒體流數據包的加密、消息認證、重放保護和密鑰管理等功能。它支持多種加密算法,比如:AES-CM、AES-GCM等。同樣的,RTCP協議也可以擴展為更安全的SRTCP(Secure RTCP)。

????????SRTP的報文格式如下,其Payload部分是加密的。可以看到,除了末尾的SRTP MKI和authentication tag外,其他與RTP報文完全相同。

????????SRTP MKI :可選,用于標識主密鑰。MKI不受完整性保護,因為這不提供任何額外保護。

????????Authentication Tag:推薦使用,認證標簽,用于攜帶消息認證數據。SRTP數據包的認證部分由RTP頭和加密的Payload部分組成。身份驗證標簽可以提高對RTP頭和有效載荷的身份驗證,并通過對序列號進行身份驗證來間接提供重放保護。

      0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+|V=2|P|X|  CC   |M|     PT      |       sequence number         | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ||                           timestamp                           | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ||           synchronization source (SSRC) identifier            | |+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ ||            contributing source (CSRC) identifiers             | ||                               ....                            | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ||                   RTP extension (OPTIONAL)                    | |+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ || |                          Payload  ...                         | || |                               +-------------------------------+ || |                               | RTP padding   | RTP pad count | |+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+| ~                     SRTP MKI (OPTIONAL)                       ~ || +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ || :                 Authentication Tag (RECOMMENDED)              : || +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |

????????實現SRTP的大致步驟如下。

????????1、會話建立。首先,客戶端發送一個OPTIONS請求來查詢服務器支持的命令集。雖然這一步不是必須的,但在某些情況下有助于客戶端了解服務器的能力。然后,客戶端發送DESCRIBE請求獲取會話描述信息,SDP中可能包含有關媒體類型、編碼、端口等信息。對于SRTP,SDP中還可能包含安全屬性行(比如:a=crypto),以表明支持安全傳輸。

????????2、協商加密。在RTSP的SETUP請求和響應中,客戶端和服務器協商使用SRTP。比如:客戶端可以請求使用SRTP傳輸。

SETUP rtsp://server.example.com/stream/trackID=1 RTSP/1.0
Transport: RTP/SAVPF;unicast;client_port=49154-49155

????????密鑰的協商,可以通過外部機制(比如:DTLS-SRTP、SDES 、ZRTP等)來進行。如果使用DTLS-SRTP,客戶端和服務器會在RTSP SETUP之后,基于RTSP提供的傳輸信息,建立DTLS連接,通過DTLS通道安全地交換SRTP密鑰和參數。

????????3、初始化SRTP上下文。一旦密鑰通過DTLS-SRTP成功交換,客戶端和服務器都會使用這些密鑰初始化各自的SRTP和SRTCP上下文。

????????4、開始播放。客戶端發送PLAY請求,開始媒體流的傳輸。此時,所有RTP和RTCP數據包都通過之前建立的安全通道傳輸,并應用SRTP/SRTCP進行加密和認證。

????????5、媒體流加密傳輸。在媒體流傳輸期間,RTP數據包被加密并通過安全的通道傳輸,而RTCP包用于質量控制和反饋,同樣受到SRTCP的保護。

????????6、會話結束。當會話結束時,除了RTSP的TEARDOWN信令外,還需要確保所有安全上下文被正確清理,包括釋放DTLS連接和廢棄SRTP密鑰,以保障安全性。

總結

????????為了全面保護RTSP流媒體通信的全流程,通常會結合使用RTSP Over TLS來加密控制信令,以及SRTP來加密媒體流,形成一個從控制到數據傳輸的全方位安全體系。這種組合確保了從會話建立到媒體播放的每一個環節都受到保護,滿足了高安全標準的實時流媒體傳輸需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13323.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

擰緊設備或工具的選型原則、常見類型和選型關鍵因素有哪些?

智能扭矩系統-智能擰緊系統-扭矩自動控制系統-SunTorque 在工業生產領域&#xff0c;擰緊控制是一項至關重要的工藝環節。它涉及螺栓、螺母等緊固件的裝配過程&#xff0c;直接關系到產品的質量和性能。因此&#xff0c;選擇合適的擰緊設備或工具對于確保擰緊過程的準確性和穩…

[牛客網]——C語言刷題day4

答案&#xff1a;B 解析&#xff1a; a是數組首元素的地址,a1的步長是int&#xff0c;所以是2 &a是數組的首地址&#xff0c;&a1步長是int[5] ptr是int類型的指針&#xff0c;指向a數組的尾后位置&#xff0c;ptr-1的步長是int,所以是a數組的最后一個元素5 答案&am…

如何使用ffmpeg 實現10種特效

相關特效的名字 特效id 特效名 1 向上移動 2 向左移動 3 向下移動 4 顫抖 5 搖擺 6 雨刷 7 彈入 8 彈簧 9 輕微跳動 10 跳動 特效展示(同時匯總相關命令) pad背景顯示 pad背景透明 相關命令(一會再講這些命令&#xff0c;先往下看) # 合成特效語音 ffmpeg -y -loglevel erro…

Element Plus/vue3 無限級導航實現

在使用element plus 時&#xff0c;最初要使用的就是導航組件了&#xff0c;官網上看到的也就是寫死的一級/二級導航&#xff0c;那么如何設計一個無限級且動態的導航呢&#xff1f;毋庸置疑&#xff0c;遞歸。廢話不多說&#xff0c;直接看代碼和效果&#xff1a; 代碼&#x…

Jmeter:錄制腳本(操作文檔)

新建線程組 打開jmeter&#xff0c;右鍵測試計劃–>添加–>Threads(Users)–>點擊"線程組" 添加錄制控制器 右鍵線程組–>添加–>邏輯控制器–>點擊"錄制控制器" 添加HTTP代理服務器 右鍵工作臺–>添加–>非測試元件–>…

YOLOv5改進 | Neck | 添加雙向特征金字塔BiFPN【小白輕松上手 | 論文必備】

&#x1f680;&#x1f680;&#x1f680;本專欄所有的改進均可成功執行&#x1f680;&#x1f680;&#x1f680; 盡管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作為一個anchor base的目標檢測的算法&#xff0c;YOLOv5可能比YOLOv8的效果更好。但是針對不同的數據…

CDN都有哪些優勢?

內容分發網絡是一個經策略性部署的整體系統&#xff0c;其中包含了分布式存儲、負載均衡、網絡請求的重定向和內容管理四個要求&#xff0c;CDN的主要核心則是內容管理和全局的網絡流量管理&#xff0c;CDN可以確保內容會以一種非常高效的方式為用戶的請求提供服務。 接下來就讓…

Linux 第三十五章

&#x1f436;博主主頁&#xff1a;??. 一懷明月? ???&#x1f525;專欄系列&#xff1a;線性代數&#xff0c;C初學者入門訓練&#xff0c;題解C&#xff0c;C的使用文章&#xff0c;「初學」C&#xff0c;linux &#x1f525;座右銘&#xff1a;“不要等到什么都沒有了…

Kubernetes安裝calico網絡插件失敗

今天啥也沒干成&#xff0c;不想排版了。 接著昨天搭建k8s集群&#xff0c;安裝calico插件&#xff0c;虛擬機一直卡。 # 在 master 節點上執行 # 下載 calico 配置文件&#xff0c;可能會網絡超時 curl https://docs.tigera.io/archive/v3.25/manifests/calico.yaml -O # 修…

[svelte] 怎么引入fortawesome的icon樣式

首先在項目的終端下執行以下命令 npm install fortawesome/fontawesome-free # 或者 yarn add fortawesome/fontawesome-free這樣子可以把fontawsome的圖標給下載到項目的對應文件中 一般都是在node_modules中 在fontawsome/fontawesome-free中就可以看到很多文件夾了 …

unapp寫微信小程序封裝水印相機組件怎么實現?

<template><view><!-- <cu-custom bgColor"bg-gradual-blue" :isBack"true"><block slot"backText">返回</block><block slot"content">編輯資料</block></cu-custom> --><…

Docker學習(10)搭建kubernetes集群

搭建kubernetes集群 1、官方部署方式&#xff1a; Minikube工具安裝 Minikube是一種能夠在計算機或者虛擬機(VM)內輕松運行單節點Kubernetes 集群的工具&#xff0c;可實現一鍵部署。這種方式安裝的系統在企業中大多被當作測試系統使用。 使用yum安裝 通過直接使用 epel-r…

三步在 vite 中配置 tailwindcss

前言 tailwindcss 是一個原子化的 css 工具&#xff0c;可以讓你免于寫 css&#xff0c;只寫 html 即可原理&#xff1a;利用你寫的 html 的 class 名稱來生成 css 樣式&#xff0c;理解為一個 postcss 插件或 loader 第一步&#xff1a;安裝 tailwindcss npm i -D tailwind…

圖片恢復的實用指南,為你拯救遺失的記憶!

隨著科技的日新月異&#xff0c;我們的生活已被照片填滿。它們記錄著我們的喜怒哀樂&#xff0c;見證著每一個重要的時刻。但我們往往會因為各種原因將手機圖片遺失&#xff0c;有什么方法可以恢復呢&#xff1f;本文將提供一份實用的圖片恢復指南&#xff0c;幫助你找回那些遺…

山西大學化學化工學院朱鳳祥教授簡介

男&#xff0c;1989年出生&#xff0c;河南安陽人&#xff0c;2019年1月于山西大學化學化工學院任特聘教授&#xff0c;主要研究方向為有機催化&#xff0c;曾獲國家自然科學基金資助&#xff08;2020-2023&#xff09;&#xff0c;迄今在國際高級雜志發表SCI論文20余篇。 200…

llama使用tutorial微調(windows版本)

Llama3-Tutorial/docs/assistant.md at main SmartFlowAI/Llama3-Tutorial GitHub 有一些命令需要修改 前期的安裝還是要按照教程搞的 streamlit run ~/Llama3-Tutorial/tools/internstudio_web_demo.py \ ~/model/Meta-Llama-3-8B-Instruct 改為了 streamlit run .\Ll…

ArrayList和LinkedList的使用

ArrayList List<> list new ArrayList<>(); LinkedList

SQL注入漏洞常用繞過方法

SQL注入漏洞 漏洞描述 Web 程序代碼中對于用戶提交的參數未做過濾就直接放到 SQL 語句中執行&#xff0c;導致參數中的特殊字符打破了原有的SQL 語句邏輯&#xff0c;黑客可以利用該漏洞執行任意 SQL 語句&#xff0c;如查詢數據、下載數據、寫入webshell 、執行系統命令以及…

WPF使用ItemsControl顯示Object的所有屬性值

對于上位機開發&#xff0c;我們有時候有這樣的需求&#xff1a;如何顯示所有的IO點位&#xff1f;比如有10個IO點位&#xff0c;那我們要寫10個TextBlock去綁定這10個點位的屬性&#xff08;本文暫時不考慮顯示的樣式&#xff0c;當然也可以考慮&#xff09;&#xff0c;當點位…

springboot整合swagger,jpa遇到的問題

1.整合jpa&#xff0c;版本問題導致Archive for required library: ‘C:/Users/Administrator/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar’ in project ‘money-server’ cannot be read or is not a valid ZIP file money-server Build path…