丨如何保證數(shù)據(jù)傳輸?shù)陌踩耞第1頁
丨如何保證數(shù)據(jù)傳輸?shù)陌踩耞第2頁
丨如何保證數(shù)據(jù)傳輸?shù)陌踩耞第3頁
丨如何保證數(shù)據(jù)傳輸?shù)陌踩耞第4頁
丨如何保證數(shù)據(jù)傳輸?shù)陌踩耞第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

為了保障音頻數(shù)據(jù)的安全,WebRTC使用了一整套機制來進行保護,下面我們就來WebRTC是如何保障數(shù)據(jù)安全的吧我們來假設一個場景AB信,為了保障數(shù)據(jù)的安全,我們只需要在A發(fā)送數(shù)據(jù)前將要發(fā)送的數(shù)據(jù)進行加密,B端收到數(shù)據(jù)之后再進行就好了,這樣看起來保證數(shù)據(jù)的安全但這里有一個問題,B端是如何知道A?另外,加密做了介紹,對于加密來說,使用非對稱加密是最安全的,因此選擇非對稱加密是必然的選擇。既然選擇非對稱加密,那么A端與B端就要交換各自的公鑰,這樣當A端使用私鑰加密時,B端才能用A的公鑰進行。同樣的道理,B端使用自己的私鑰進行加密時,A端可以使用B端的公鑰進行。按照上面的描述,你會發(fā)現(xiàn)其邏輯上有個安全,即A與B交換公鑰時,并沒有進行任何防護。完全可以用各種在A與B交換公鑰時獲取到這些公鑰,這樣他們就可以輕而為了解決這個問題,WebRTCDTL(Datagramtrcty,至于S的實現(xiàn)細節(jié),你暫時不用關(guān)心,后面我們會對它做詳細的講解。你現(xiàn)在只要知道通過DTLS協(xié)議就可以有效地解決A與B就好了。A與B交換公鑰時被竊取的問題解決后,是不是雙方通信就安我們再來想像一個場景,還是A與B通信,但此時BB與B通信時冒充的B了A的重要信息。其實這種情況發(fā)生在會議系統(tǒng)或在線教育的小班課中,此時會議中有多人進行互動,如果進入了會議中,他只需聽別人說話,自己不發(fā)言,這樣就將關(guān)鍵的信息竊取走了。所以現(xiàn)在的問題又來了,我們該對方的是否合法呢?以防止內(nèi)容被竄改。WebRTC也是使用的這種方式,它首先通過信令服務器交換SDP,SDP信息中包括了以下幾個重要信息:代碼a=ice-a=ice-a=fingerprint:sha- SDP完成后,AB獲取到了對方的ice-ufrag、ice-pwdfingerprint息,有了其中,ice-ufrag和ice-pwd是用戶名和。當A與B建立連接時,A要帶著它的用戶名和過來,此時B端就可以通過驗證A帶來的用戶名和與SDP中的用戶名和密碼是否一致的,來判斷A是否是一個合法用戶了。除此之外,fingerprint也是驗證的關(guān)鍵一步,它是存放公鑰的(或叫信),在通過ice-ufrag和ice-pwd驗證用戶的之余,還要對它發(fā)送的做驗通過上面的描述你就可以知道WebRTC在數(shù)據(jù)安全方面做了非常多少努力了。下面的序列WebRTC安全序從這中你可以看到,A與B在傳輸數(shù)據(jù)之前,需要經(jīng)歷如下幾個步驟首先通過信令服務器交換SDP信息,也就是進行協(xié)商。在SDP中記錄了用戶的用緊接著,A通過STUN協(xié)議(底層使用UDP協(xié)議)進行認證。如果STUN消息中的用戶名和與交換的SDP中的用戶名和一致,則說明是合法用戶。確認用戶為合法用戶后,則需要進行DTLS協(xié)商,交換公鑰并協(xié)商相關(guān)的信息。同時還要通過fingerprint對進行驗證,確認其沒有在傳輸中被竄改。以上就是WebRTC保證數(shù)據(jù)安全的整套機制。前面我們說了WebRTC過使用DTLS、SRTP幾個協(xié)議的結(jié)合來達到數(shù)據(jù)安全的,DTLS說到網(wǎng)絡上的數(shù)據(jù)安全你可能首先想到的是HTTPS,你也可以簡單地將HTTPS理解為“HTTP協(xié)議+數(shù)據(jù)加密”,當然實際上它要復雜得多。HTTPS的底層最初是使用SSL(SecureSocketsLayer,接層)協(xié)議對數(shù)據(jù)加密。當SSL更新到3.0時,IETF對SSL3.0進行了標準化,并增加了一些新的功能,不過基本與SSL3.0沒什么區(qū)別,標準化后的SSL名為TLS1.0(TransportLayerSecurity,安全傳輸層協(xié)議),所以可以說TLS1.0就是SSL的3.1版本。TLS協(xié)議由TLS記錄協(xié)議和TLS握手協(xié)議組成TLS記錄協(xié)議,用于數(shù)據(jù)的加密、數(shù)據(jù)完整性檢測等TLS握手協(xié)議,主要用于密鑰的交換與的確認由于TLS底層是基于TCP協(xié)議的,而WebRTC音數(shù)據(jù)的傳輸主要基于UDP協(xié)議,因此WebRTC數(shù)據(jù)的保護無法直接TLS議。但TLS議在數(shù)據(jù)安全方面做得確實非常完善,所以人們就想到是否可以將TLS議移植到UDP議上此DTLS應運而所以你可以認為DTLS就是運行在UDP協(xié)議之上的簡化版本的TLS,它使用的安全機制TLS幾乎一模一在DTLS協(xié)議中,最關(guān)鍵是的它的握手協(xié)議,正如下圖所展示DTLS握手協(xié)議示在WebRTC中為了更有效地保護音數(shù)據(jù),所以需要使用DTLS協(xié)議交換公鑰,并確認使用的算法,這個過程在DTLS協(xié)議中稱為握手協(xié)議。DTLS的握手過程如下首先DTLS議采用C/S進行通信,其中發(fā)起請求的一端為客戶端,接收請求的為客戶端向服務端發(fā)送o消息,服務端收到請求后,回Server o消息,并將服務端確認加密算法后,發(fā)送Finished消息,至此握手結(jié)束。DTLS握手結(jié)束之后,通信雙方就可以開始相互發(fā)送音數(shù)據(jù)了OpenSSL講到數(shù)據(jù)安全就不得不提OpenSSL庫,通過它的名字你也基本可以知道它是做什么的。OpenSSL一個開源的SSL現(xiàn),正如我們上面說到的,SSLTLS期的名字,實際上OpenSSL實現(xiàn)了整個TLS協(xié)議。不僅如此,OpenSSL實現(xiàn)了DTLS由于其代碼開源,實現(xiàn)得又特別高效,所以現(xiàn)在大部分需要數(shù)據(jù)安全的應用程序基本上都是使用OpenSSL來實現(xiàn)的。關(guān)于OpenSSL庫,有以下幾個基本概念你一定要清SSL_CTX:SSL上下文,主要指明你要使用的SSL版本是多少SSL:代表一個SSL連接,你可以把它看作是一個句柄,一般還要與一個具體的進行綁定SSL_Write:用于向SSL連接寫數(shù)據(jù)SSL_Read:用于從SSL連接讀數(shù)據(jù)那OpenSSL到底該如何使用呢?其實整體還是蠻簡單的,下面我們就來看一下如何使OpenSSL,具體步驟可闡述為如下第一步,初始化SSL。在這一步調(diào)用SSL_library_init()初始化OpenSSL然后加載OpenSSL支持的所有算法,以及相關(guān)的錯誤信息。代碼OpenSSL_add_all_algorithms()/*載入Openssl所支持的算法SSL_load_error_strings()/*載入Openssl的相關(guān)錯誤信息第二步,創(chuàng)建SSL上下文。在這一步可以指定使用的SSL協(xié)議是哪個版本的代碼SSL_CTX*ctx=第三步,加載。如下所示,該函數(shù)的第一個參數(shù)是SSL上下文,第二個參數(shù)是要加載代碼SSL_CTX_use__file(ctx,.crt,第四步,加載私鑰。在這一步可以先將私鑰加載進來,然后再檢測私鑰是否正代碼SSL_CTX_use_PrivateKey_file(ctx,prikey.pem, /*檢查私鑰是否正確第五步,建立SSL與Socket。在這一步,首先SSL下文創(chuàng)建SSL象;然后,將SSL對象與已經(jīng)創(chuàng)建好的socket進行綁定;最后是建立SSL連接。代碼SSL*ssl=SSL_new(ctx)/*創(chuàng)建SSL用于通信SSL_set_fd(ssl,socket_fd)/*與socket綁定 /*建立SSL連接第六步,使用SSL進行數(shù)據(jù)通信。主要通過SSL_write和SSL_read發(fā)送和接收數(shù)據(jù)代碼SSL_write(ssl,buf,strlen(buf))/*向ssl發(fā)數(shù)據(jù),消息通過SSL加密SSL_read(ssl,buf, /*從ssl接收消息第七步,釋放資源。當SSL用完后,需要將占用的資源全部釋放掉,怎么實現(xiàn)呢?首先將SSL連接關(guān)掉,然后釋放SSL對象,最后釋放SSL上下文。代碼SSL_shutdown(ssl)/*關(guān)閉SSL連接SSL_ /*釋放SSLSSL_CTX_(ctx)/*釋放CTX以上這七步就是OpenSSL基本步驟。為了更好地理解和OpenSSL,你熟悉完SRTP/SRTCP在《06|WebRTC的RTPRTCP解》一文中我向你詳細介紹了RTP/RTCP議,通過該文你可以了解到,RTP/RTCP并沒有對它的負載數(shù)據(jù)進行任何保護。因此,如果你通過抓包工具,如Wireshark,將音數(shù)據(jù)抓取到后,通過該工具就可以直接將音出來,這是非常的事情在WebRTC中,為了防止這類事情發(fā)生,沒有直接使用RTP/RTCP協(xié)議,而是使用SRTP/SRTCP議即安全的RTP/RTCP議WebRTC用了非常有名的libsrtp將原來的RTP/RTCP議數(shù)據(jù)轉(zhuǎn)換SRTP/SRTCP協(xié)議數(shù)據(jù)。libsrtp的使用非常簡單,具體步驟可總結(jié)為如下第一步,初始化libsrtp代碼第二步,創(chuàng)建Session。創(chuàng)建Session略微復雜一些,這過程中需要指定創(chuàng)建的策略,代碼srtp__t3//Setallfieldstostd::memset(&,0,sizeof(srtp__t));//清空結(jié)構(gòu)6//指定用哪種算法進行內(nèi)容的完整性switchcasesrtp_crypto__set_aes_cm_128_hmac_sha1_80(& casesrtp_crypto__set_aes_cm_128_hmac_sha1_32(&srtp_crypto__set_aes_cm_128_hmac_sha1_80(&.rtcp);//NOTE:Mustbe802022.ssrc.value=23 =key;//指定時的公25//RequiredforsendingRTPretransmissionwithout26.allow_repeat_tx= //使用RTX進行RTP包重27 =1024;//窗口緩沖區(qū)大28 =//SettheSRTPsrtp_err_status_terr=srtp_create(&this->session,&第三步,對RTP包加密。如下面示例代碼所示代碼srtp_err_status_terr=srtp_protect(this-第一個參數(shù)是Session,第二個參數(shù)是要加密的數(shù)據(jù),第三個參數(shù)是被加密數(shù)據(jù)的長度。需要注意的是,加密后的數(shù)據(jù)也存放在EncryptBuffer,即輸入數(shù)據(jù)與輸出數(shù)據(jù)共用同一塊內(nèi)容。第四步,對SRTP包。這同上面的第三步類似,只不過操作相反,這里變成了srtp_err_status_terr=srtp_unprotect(this 代第五步,也就是最后一步,是釋放資源代碼以上這五步就是使用libsrtp對RTP數(shù)據(jù)加密/的基本步驟本文首先向你介紹了WebRTC為了保護音數(shù)據(jù)的安全性,提供的是怎樣一整套安全機制,然后又對這一套安全機制中的幾個重點概念做了詳細講解,如DTLS協(xié)議、OpenSSL庫的使用以及如何將RTP/RTCP數(shù)據(jù)轉(zhuǎn)成SRTP/SRTCP數(shù)據(jù)。在介紹DTLS議時,我們重點講解了它是如何進行握手操作的,這里你只需要了解DTLSOpenSSL庫實現(xiàn)的,你只需要調(diào)用它的API即可。然后,我們又詳細介紹了使用OpenSSL庫的基本步驟,一共分成七大步。但這里所講的七大步只是使用OpenSSL的一個基本步驟,對于OpenSSL的DTLS協(xié)議握手的API我這里并沒有進行講解,但有了這個基礎(chǔ)我相信你自己一定可能自行學習OpenSSL的其他相關(guān)最后,我們還講解了libsrtp庫的使用,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論