1、SIP和RTP加密需要關(guān)注兩個(gè)方面的加密,一個(gè)方面是對(duì)SIP信令加密(SIP/TSL),包括對(duì)用戶消息,SDP等文本消息加密,保證信令安全。另外一個(gè)加密就是對(duì)語音加密(SRTP),保證用戶之間的語音流的安全。如果僅對(duì)SIP加密,不對(duì)RTP加密,則沒有什么實(shí)際意義。
2、在SIP加密中,SIP使用了TLS來實(shí)現(xiàn)加密,讀者可以看到加密鎖介于應(yīng)用層和傳輸層的,早期的加密使用的是SSL,TLS慢慢替代了SSL。TLS使用的是服務(wù)器和終端密碼共享機(jī)制來實(shí)現(xiàn)傳輸。
這里,在使用TLS時(shí)需要有幾個(gè)地方需要特別注意:
- 系統(tǒng)支持TLS和SSL時(shí),首先使用的應(yīng)該是TLS安全機(jī)制,但是如果客戶端要求使用SSL,則也可以使用SSL 2.0。在RFC7586的標(biāo)準(zhǔn)中不推薦這樣的處理機(jī)制。
- TSL兩種處理機(jī)制的不同:對(duì)稱和非對(duì)稱處理方式。對(duì)稱模式是雙方共享一個(gè)密鑰,處理速度比較快,占用資源比較少,操作簡(jiǎn)單,但是需要加密解密處理,另外,只能使用在已經(jīng)創(chuàng)建的通信通道上,不同的密鑰對(duì)不同的用戶,不能對(duì)用戶進(jìn)行認(rèn)證。
非對(duì)稱方式可以支持密鑰的不同發(fā)送,更加安全,也容易集成。但是,處理速度比較慢,另外需要消耗更多系統(tǒng)資源。
在上面我們已經(jīng)提到了加密的各種優(yōu)缺點(diǎn),資源消耗是一個(gè)比較重要的話題。加密以后的系統(tǒng)性能可能會(huì)受影響。
以上數(shù)據(jù)是使用OpenSIPS的早期版本對(duì)認(rèn)證/非認(rèn)證模式,加密和不加密,使用UDP/TCP的吞吐量做的測(cè)試。讀者可以看到,通過不同的配置方法會(huì)導(dǎo)致完全不同的結(jié)果,而且測(cè)試結(jié)果相差很多。
以上圖例是OpenSIPS配置為一個(gè)outbound Proxy 環(huán)境下的吞吐量測(cè)試結(jié)果,讀者可以看到,如果設(shè)置了TLS以后的差距。注意,此數(shù)據(jù)是介于OpenSIPS平臺(tái)的早期版本做的測(cè)試,用戶也調(diào)整了一些必要的參數(shù)來支持不同的TLS加密。目前OpenSIPS的性能和TSL版本都已經(jīng)升級(jí),服務(wù)器性能可能有所提升。關(guān)于如何進(jìn)行測(cè)試,讀者可以參考我們的鏈接資源,通過優(yōu)化自己的平臺(tái)來進(jìn)一步提升TLS以后的性能。
TLS可以對(duì)SIP信令進(jìn)行加密處理,也包括SDP的加密,這樣就完全保證了信令的安全。
3、TSL可以支持端對(duì)端的加密,也可以支持通過跳轉(zhuǎn)(Hop-by-Hop)的加密方式。端對(duì)端加密(End-to-End)則需要整個(gè)系統(tǒng)都使用TLS加密方式。
端對(duì)端的TLS加密方式操作比較簡(jiǎn)單,一般部署在集成商或者簡(jiǎn)單的電話系統(tǒng)中,這取決于部署需求。但是,它存在一些問題,例如,Proxy不能讀取SIP消息,甚至告警消息。另外,因?yàn)橐呀?jīng)SIP已經(jīng)加密,運(yùn)營(yíng)商或者服務(wù)提供商所提供的服務(wù)可能不能到得完整的支持。最后,如果是跨國(guó)的服務(wù)的話,端對(duì)端的SIP加密是不允許的。
Hop By Hop加密方式是目前部署非常普遍的一種加密方式。從服務(wù)端角度來說,Hop By Hop的加密方式則相對(duì)比較好一點(diǎn)。如果遇到跨國(guó)的測(cè)試時(shí),則可以取消加密,呼叫仍然可以正常工作。另外,Hop by Hop 的方式可以支持SIP修改一些SIP頭參數(shù),例如可以修改Record-Route 或Via 頭域。
選擇什么樣的方式都是有成本的。兩種加密方式同樣會(huì)導(dǎo)致不同的語音數(shù)據(jù)結(jié)果,例如,丟包情況,和時(shí)延。以下圖例是兩種方式的延遲測(cè)試結(jié)果,希望讀者要注意:
4、我們通過一個(gè)TLS對(duì)SIP加密的實(shí)例來說明整個(gè)TLS加密過程,大致流程和以前介紹的認(rèn)證過程是基本相同的,這里僅介入了TLS的密鑰交換:
這里,用戶需要注意,如果需要對(duì)SIP整個(gè)路徑加密,需要使用sips訪問服務(wù)器地址,當(dāng)然這里的端口是5061而不是默認(rèn)的5060端口。例如,格式為:
sips:james@hiastar.com
另外,用戶的SIP數(shù)據(jù)也可以實(shí)現(xiàn)部分安全加密,可以使用sip:方式來訪問服務(wù)器或者IPPBX,因?yàn)锽2BUA或者用戶的IPPBX已經(jīng)創(chuàng)建了介于運(yùn)營(yíng)商和本地服務(wù)器之間的TLS連接。
最后,在使用TLS時(shí),如果使用sips訪問服務(wù)器,那就說明用戶使用TCP傳輸,而不是UDP測(cè)試。因?yàn)門LS要求使用TCP測(cè)試。很多時(shí)候,用戶終端的傳輸方式?jīng)]有做調(diào)整,也導(dǎo)致了很多類似常識(shí)性的錯(cuò)誤發(fā)生。
5、關(guān)于SIP應(yīng)用環(huán)境和TLS使用時(shí)的幾個(gè)RFC標(biāo)準(zhǔn)的沖突。我們現(xiàn)在僅討論了TLS和SIP加密的流程和基本原理。因?yàn)橐郧暗膫鹘y(tǒng)PSTN環(huán)境中,幾乎沒有所謂的安全問題或安全機(jī)制的考慮。在SIP技術(shù)發(fā)展如此兇猛的市場(chǎng)中,事實(shí)上,在加密層面,基于SIP的標(biāo)準(zhǔn)就存在很多方面的沖突或者不統(tǒng)一,這樣就導(dǎo)致了很多兼容性方面的問題,例如終端和服務(wù)器端的問題,服務(wù)器端到服務(wù)器端的問題,應(yīng)用層面的TLS問題等爭(zhēng)議。根據(jù)協(xié)議制定者的提議(具體提議內(nèi)容參考鏈接),目前,各種RFC標(biāo)準(zhǔn)之間互相有沖突的結(jié)果方面包括:
- RFC 3261 要求 url支持,sip,sips,證書,hop by hop,但是如何讓證書和主機(jī)關(guān)聯(lián)是一個(gè)問題,也沒有非常明確規(guī)定最后一個(gè)hop的處理。
- 對(duì)于TLS證書的使用上,RFC 3263要求的是Domain Name,而幾乎同一時(shí)間發(fā)布的RFC3261則要求的是Host Name。這兩個(gè)規(guī)范可能有沖突或歧義。
- RFC 5922中的Domain 證書問題,把a(bǔ)uthentication和authorization混合在了一起。
- RFC 5923 對(duì)TLS證書認(rèn)證重新連接的問題沒有解釋清楚包括證書連接重用的問題。
- 如果TLS證書連接出現(xiàn)錯(cuò)誤以后,沒有比較清晰的錯(cuò)誤碼。
在本章節(jié)的討論中,我們首先討論了關(guān)于TLS的定義和使用方式,SIP加密的流程,使用TLS以后服務(wù)器的性能問題,TLS在不同標(biāo)準(zhǔn)中的一些爭(zhēng)議。大家一定要注意使用TLS以后的性能問題,同時(shí)因?yàn)闃?biāo)準(zhǔn)不同所產(chǎn)生的兼容性問題。最后,筆者還是建議讀者更多參考RFC 3261,以RFC 3261為基本標(biāo)準(zhǔn)。
在接下來的講座中,我們將繼續(xù)討論關(guān)于SIP安全的幾個(gè)問題,SRTP,各種安全問題,防止手段和開源檢查工具。
參考資料:
https://tools.ietf.org/html/rfc7568
http://www.cs.columbia.edu/~hgs/papers/Shen1008_TLS.pdf
https://www.acunetix.com/
https://www.cisco.com/c/en/us/about/press/internet-protocol-journal/back-issues/table-contents-45/123-security.html
關(guān)注微信號(hào):asterisk-cn 獲得更多行業(yè)技術(shù)信息,訪問開源IPPBX網(wǎng)站獲得開源IPPBX技術(shù)幫助和下載:www.issabel.cn/forum。