1、SIP和RTP加密需要關注兩個方面的加密,一個方面是對SIP信令加密(SIP/TSL),包括對用戶消息,SDP等文本消息加密,保證信令安全。另外一個加密就是對語音加密(SRTP),保證用戶之間的語音流的安全。如果僅對SIP加密,不對RTP加密,則沒有什么實際意義。

2、在SIP加密中,SIP使用了TLS來實現(xiàn)加密,讀者可以看到加密鎖介于應用層和傳輸層的,早期的加密使用的是SSL,TLS慢慢替代了SSL。TLS使用的是服務器和終端密碼共享機制來實現(xiàn)傳輸。

這里,在使用TLS時需要有幾個地方需要特別注意:
- 系統(tǒng)支持TLS和SSL時,首先使用的應該是TLS安全機制,但是如果客戶端要求使用SSL,則也可以使用SSL 2.0。在RFC7586的標準中不推薦這樣的處理機制。
- TSL兩種處理機制的不同:對稱和非對稱處理方式。對稱模式是雙方共享一個密鑰,處理速度比較快,占用資源比較少,操作簡單,但是需要加密解密處理,另外,只能使用在已經創(chuàng)建的通信通道上,不同的密鑰對不同的用戶,不能對用戶進行認證。

非對稱方式可以支持密鑰的不同發(fā)送,更加安全,也容易集成。但是,處理速度比較慢,另外需要消耗更多系統(tǒng)資源。

在上面我們已經提到了加密的各種優(yōu)缺點,資源消耗是一個比較重要的話題。加密以后的系統(tǒng)性能可能會受影響。

以上數(shù)據(jù)是使用OpenSIPS的早期版本對認證/非認證模式,加密和不加密,使用UDP/TCP的吞吐量做的測試。讀者可以看到,通過不同的配置方法會導致完全不同的結果,而且測試結果相差很多。

以上圖例是OpenSIPS配置為一個outbound Proxy 環(huán)境下的吞吐量測試結果,讀者可以看到,如果設置了TLS以后的差距。注意,此數(shù)據(jù)是介于OpenSIPS平臺的早期版本做的測試,用戶也調整了一些必要的參數(shù)來支持不同的TLS加密。目前OpenSIPS的性能和TSL版本都已經升級,服務器性能可能有所提升。關于如何進行測試,讀者可以參考我們的鏈接資源,通過優(yōu)化自己的平臺來進一步提升TLS以后的性能。
TLS可以對SIP信令進行加密處理,也包括SDP的加密,這樣就完全保證了信令的安全。
3、TSL可以支持端對端的加密,也可以支持通過跳轉(Hop-by-Hop)的加密方式。端對端加密(End-to-End)則需要整個系統(tǒng)都使用TLS加密方式。

端對端的TLS加密方式操作比較簡單,一般部署在集成商或者簡單的電話系統(tǒng)中,這取決于部署需求。但是,它存在一些問題,例如,Proxy不能讀取SIP消息,甚至告警消息。另外,因為已經SIP已經加密,運營商或者服務提供商所提供的服務可能不能到得完整的支持。最后,如果是跨國的服務的話,端對端的SIP加密是不允許的。
Hop By Hop加密方式是目前部署非常普遍的一種加密方式。從服務端角度來說,Hop By Hop的加密方式則相對比較好一點。如果遇到跨國的測試時,則可以取消加密,呼叫仍然可以正常工作。另外,Hop by Hop 的方式可以支持SIP修改一些SIP頭參數(shù),例如可以修改Record-Route 或Via 頭域。
選擇什么樣的方式都是有成本的。兩種加密方式同樣會導致不同的語音數(shù)據(jù)結果,例如,丟包情況,和時延。以下圖例是兩種方式的延遲測試結果,希望讀者要注意:

4、我們通過一個TLS對SIP加密的實例來說明整個TLS加密過程,大致流程和以前介紹的認證過程是基本相同的,這里僅介入了TLS的密鑰交換:

這里,用戶需要注意,如果需要對SIP整個路徑加密,需要使用sips訪問服務器地址,當然這里的端口是5061而不是默認的5060端口。例如,格式為:
sips:james@hiastar.com
另外,用戶的SIP數(shù)據(jù)也可以實現(xiàn)部分安全加密,可以使用sip:方式來訪問服務器或者IPPBX,因為B2BUA或者用戶的IPPBX已經創(chuàng)建了介于運營商和本地服務器之間的TLS連接。
最后,在使用TLS時,如果使用sips訪問服務器,那就說明用戶使用TCP傳輸,而不是UDP測試。因為TLS要求使用TCP測試。很多時候,用戶終端的傳輸方式沒有做調整,也導致了很多類似常識性的錯誤發(fā)生。
5、關于SIP應用環(huán)境和TLS使用時的幾個RFC標準的沖突。我們現(xiàn)在僅討論了TLS和SIP加密的流程和基本原理。因為以前的傳統(tǒng)PSTN環(huán)境中,幾乎沒有所謂的安全問題或安全機制的考慮。在SIP技術發(fā)展如此兇猛的市場中,事實上,在加密層面,基于SIP的標準就存在很多方面的沖突或者不統(tǒng)一,這樣就導致了很多兼容性方面的問題,例如終端和服務器端的問題,服務器端到服務器端的問題,應用層面的TLS問題等爭議。根據(jù)協(xié)議制定者的提議(具體提議內容參考鏈接),目前,各種RFC標準之間互相有沖突的結果方面包括:
- RFC 3261 要求 url支持,sip,sips,證書,hop by hop,但是如何讓證書和主機關聯(lián)是一個問題,也沒有非常明確規(guī)定最后一個hop的處理。
- 對于TLS證書的使用上,RFC 3263要求的是Domain Name,而幾乎同一時間發(fā)布的RFC3261則要求的是Host Name。這兩個規(guī)范可能有沖突或歧義。
- RFC 5922中的Domain 證書問題,把authentication和authorization混合在了一起。
- RFC 5923 對TLS證書認證重新連接的問題沒有解釋清楚包括證書連接重用的問題。
- 如果TLS證書連接出現(xiàn)錯誤以后,沒有比較清晰的錯誤碼。
在本章節(jié)的討論中,我們首先討論了關于TLS的定義和使用方式,SIP加密的流程,使用TLS以后服務器的性能問題,TLS在不同標準中的一些爭議。大家一定要注意使用TLS以后的性能問題,同時因為標準不同所產生的兼容性問題。最后,筆者還是建議讀者更多參考RFC 3261,以RFC 3261為基本標準。
在接下來的講座中,我們將繼續(xù)討論關于SIP安全的幾個問題,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
關注微信號:asterisk-cn 獲得更多行業(yè)技術信息,訪問開源IPPBX網站獲得開源IPPBX技術幫助和下載:www.issabel.cn/forum。