山东大学软件学院项目实训-创新实训-SDUMeeting(一)
山東大學軟件學院項目實訓-創(chuàng)新實訓-SDUMeeting(一)
一、前言:
這個項目是山東大學視頻會議項目,這個項目基于webrtc構(gòu)建多人視頻會議系統(tǒng),我負責視頻會議客戶端及服務(wù)端安全防護,這個專欄記錄我的個人工作。
二、主要工作
1.webrtc相關(guān)的安全問題
2.linux服務(wù)器的安全問題
3.web安全問題,包括各種針對web的攻擊手段的防護,xss,sql注入,文件注入
三、項目的安全基礎(chǔ)
整個項目是以webrtc為基礎(chǔ)構(gòu)建的,webrtc是整個項目的安全基礎(chǔ),webrtc本身安全性比較高,peerconontion之間是加密的,也就是兩兩之間是加密的,是中心化安全的,也便于管理。
下面對webrtc的安全進行了一些分析
1.SDP
在介紹webrtc的安全性之前以常見的https為例,https是http with tls,采用的是tls加密,https是通過非對稱加密、數(shù)字簽名和數(shù)字證書來確保數(shù)據(jù)傳輸?shù)陌踩?#xff0c;這其實是SSL協(xié)議的一部分,在webrtc中也會采用類似SSL的機制來保證數(shù)據(jù)安全,這就是了DTLS。
我們先來看一下,webrtc是如何識別雙方身份的。
它首先通過信令服務(wù)器交換 SDP,SDP 信息中包括了以下幾個重要信息:
a=ice-ufrag:khLS
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:
一個sdp實例
Syntax:identity-assertion = identity-assertion-value*(SP identity-extension)identity-assertion-value = base64identity-extension = extension-name [ "=" extension-value ]extension-name = tokenextension-value = 1*(%x01-09 / %x0b-0c / %x0e-3a / %x3c-ff); byte-string from [RFC4566]<ALPHA and DIGIT as defined in [RFC4566]><base64 as defined in [RFC4566]>Example:a=identity:\eyJpZHAiOnsiZG9tYWluIjoiZXhhbXBsZS5vcmciLCJwcm90b2NvbCI6ImJvZ3Vz\In0sImFzc2VydGlvbiI6IntcImlkZW50aXR5XCI6XCJib2JAZXhhbXBsZS5vcmdc\IixcImNvbnRlbnRzXCI6XCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3l6XCIsXCJz\aWduYXR1cmVcIjpcIjAxMDIwMzA0MDUwNlwifSJ9Note that long lines in the example are folded to meet the columnwidth constraints of this document; the backslash ("\") at the end ofa line, the carriage return that follows, and whitespace shall be ignored.
SDP 交換完成后,A 與 B 都獲取到了對方的 ice-ufrag、ice-pwd 和 fingerprint 信息,有了這些信息后,就可驗證對方是否是一個合法用戶了。
其中, ice-ufrag 和 ice-pwd 是用戶名和密碼。當 A 與 B 建立連接時,A 每次發(fā)送數(shù)據(jù)到B,都要帶著它的用戶名和密碼過來,此時 B 端就可以通過驗證 A 帶來的用戶名和密碼與 SDP 中的用戶名和密碼是否一致的,來判斷 A 是否是一個合法用戶了。
除此之外,fingerprint也是驗證合法性的關(guān)鍵一步,它是存放公鑰證書的指紋(或叫信息摘要),在通過 ice-ufrag 和 ice-pwd 驗證用戶的合法性之余,還要對它發(fā)送的證書做驗證,看看證書在傳輸?shù)倪^程中是否被竄改了。
A 與 B 在傳輸數(shù)據(jù)之前,需要經(jīng)歷如下幾個步驟。
- 首先通過信令服務(wù)器交換 SDP 信息,也就是進行媒體協(xié)商。在 SDP 中記錄了用戶的用戶名、密碼和指紋,有了這些信息就可以對用戶的身份進行確認了。
- 然后就是雙方通過 STUN\TURN 協(xié)議獲得自己的host、srflx 和 relay,交換candidate,這樣雙方才能建立連接。但是在語言視頻直播中,客戶端B一般是流媒體服務(wù)器,所以客戶端A發(fā)一個STUN request ,服務(wù)端B響應(yīng)一個STUN response,雙方就可以建立連接了,但是發(fā)送STUN 消息的時候要帶上用戶名和密碼。如果 STUN 消息中的用戶名和密碼與交換的 SDP 中的用戶名和密碼一致,則說明是合法用戶。
- A、B建立連接后,則需要進行 DTLS 協(xié)商(協(xié)商過程下面會講),交換公鑰證書并協(xié)商密碼相關(guān)的信息。同時還要通過 fingerprint 對證書進行驗證,確認其沒有在傳輸中被竄改。
- 最后,再使用協(xié)商后的密碼信息和公鑰對數(shù)據(jù)進行加密,開始傳輸音視頻數(shù)據(jù)。
在本項目中sfu服務(wù)器管理sdp的交換。
2.DTLS協(xié)議
https是基于tls加密的,tls是基于tcp的,而 WebRTC 音視頻數(shù)據(jù)的傳輸主要基于 UDP 協(xié)議,因此 WebRTC 對數(shù)據(jù)的保護無法直接使用 TLS 協(xié)議。但 TLS 協(xié)議在數(shù)據(jù)安全方面做得確實非常完善,將 TLS 協(xié)議移植到 UDP 協(xié)議上,DTLS就誕生了。
在 WebRTC 中為了更有效地保護音視頻數(shù)據(jù),所以需要使用 DTLS 協(xié)議交換公鑰證書,并確認使用的密碼算法,這個過程在 DTLS 協(xié)議中稱為握手協(xié)議。
DTLS 的握手過程如下:
首先 DTLS 協(xié)議采用 C/S 模式進行通信,其中發(fā)起請求的一端為客戶端,接收請求的為服務(wù)端。客戶端向服務(wù)端發(fā)送 ClientHello 消息,服務(wù)端收到請求后,回 ServerHello 消息,并將自己的證書發(fā)送給客戶端,同時請求客戶端證書。客戶端收到證書后,將自己的證書發(fā)給服務(wù)端,并讓服務(wù)端確認加密算法。服務(wù)端確認加密算法后,發(fā)送 Finished 消息,至此握手結(jié)束。
DTLS解決的問題是交換密鑰約定使用的加密算法,也就是說DTLS不解決加密、解密的問題 , 加密解密的問題是通過 SRTP/SRTCP 協(xié)議解決的。
3.SRTP/SRTCP 協(xié)議
RTP/RTCP 協(xié)議并沒有對它的負載數(shù)據(jù)進行任何保護。因此,如果你通過抓包工具,如 Wireshark,將音視頻數(shù)據(jù)抓取到后,通過該工具就可以直接將音視頻流播放出來。
在 WebRTC 中,為了防止這類事情發(fā)生,沒有直接使用 RTP/RTCP 協(xié)議,而是使用了 SRTP/SRTCP 協(xié)議 ,即安全的 RTP/RTCP 協(xié)議。
WebRTC 使用了非常有名的 libsrtp 庫將原來的 RTP/RTCP 協(xié)議數(shù)據(jù)轉(zhuǎn)換成 SRTP/SRTCP 協(xié)議數(shù)據(jù)。
后兩個協(xié)議是webrtc封裝好的,在調(diào)用peerconnection的時候建立協(xié)議連接。
項目整體的安全架構(gòu)
+----------------+| || Signaling || Server || |+----------------+^ ^/ \HTTPS / \ HTTPS/ \/ \v vJS API JS API+-----------+ +-----------+| | Media | |Alice | Browser |<---------->| Browser | Bob| | (DTLS+SRTP)| |+-----------+ +-----------+^ ^--+ +--^ ^| | | |v | | v+-----------+ | | +-----------+| |<--------+ | || IdP1 | | | IdP2 || | +------->| |+-----------+ +-----------+
總結(jié)
以上是生活随笔為你收集整理的山东大学软件学院项目实训-创新实训-SDUMeeting(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu18.04版本安装ssh及连
- 下一篇: oppo怎样把sd卡照片导入手机相册