1、Authentication和authorization是SIP流程中首先進(jìn)行的一個(gè)安全機(jī)制,它負(fù)責(zé)確認(rèn)身份和擁有的權(quán)限。簡單來說,用戶需要首先執(zhí)行身份確認(rèn),然后通過Proxy驗(yàn)證用戶擁有的權(quán)限。
Authentication是負(fù)責(zé)確認(rèn)你是誰;authorization是負(fù)責(zé)確認(rèn)你可以干什么,具有什么樣的應(yīng)用權(quán)限。為了讓讀者對(duì)認(rèn)證過程有一個(gè)基本的了解,筆者先介紹一下SIP Auth的認(rèn)證過程。
在以上圖例中,整個(gè)認(rèn)證過程經(jīng)過了以下幾個(gè)步驟:
- UA james 首先對(duì)proxy 服務(wù)器發(fā)出INVITE請(qǐng)求表示需要注冊(cè),驗(yàn)證身份。
- Proxy 服務(wù)器第一次回復(fù)407 Proxy Auth Required,表示UA需要發(fā)送認(rèn)證信息,并且對(duì)此UA發(fā)送nonce 消息。這個(gè)nonce消息會(huì)保存到Proxy中。
- UA 收到了nonce 消息以后,獲悉服務(wù)器需要重新發(fā)送INVITE,并且需要攜帶hash重新認(rèn)證。因此,UA結(jié)合密碼和nonce進(jìn)行加密運(yùn)算(MD5)。
- UA 通過MD5運(yùn)算,最后獲得hash。
- 然后ReINVITE 消息,告訴abc.com Proxy, UA攜帶了計(jì)算后的hash。
- Proxy服務(wù)器通過以前保存的nonce,結(jié)合設(shè)置的密碼進(jìn)行計(jì)算
- 如果Proxy計(jì)算出的hash和UA發(fā)送到hash是完全一樣的,則表示密碼匹配成功。
- Proxy服務(wù)器接受了這個(gè)ReINVITE,最后對(duì)其UA發(fā)送200 OK,確認(rèn)了用戶身份。
以上過程中,雙方密碼都沒有公開進(jìn)行傳輸,SIP安全得到了保證。關(guān)于MD5在SIP中的運(yùn)算,我以前在文章中有所介紹。這里,筆者不做過多解釋。關(guān)于nonce的算法參考rfc2617。
2、SIP注冊(cè)過程中,我們經(jīng)常會(huì)看到401和407的消息。用戶應(yīng)該知道,4XX定義為客戶端錯(cuò)誤消息。
401 Unauthorized 一般是通過注冊(cè)服務(wù)器進(jìn)行注冊(cè)流程處理。
407 Proxy authentication required則一般都是Proxy回復(fù)的客戶消息, 它和401非常相似,但是它需要UA首先對(duì)Proxy認(rèn)證。401 頭中包含的是WWW-Authenticate,而407 則包含的proxy_authentication。
hash的算法是一個(gè)比較復(fù)雜的技術(shù)范圍,用戶可以參考很多專業(yè)的文檔研究其使用方式。目前,大量的數(shù)據(jù)證明,128 bits的MD5存在很多的缺陷,現(xiàn)在SHA-1相對(duì)比較安全,支持了160bits,但是SHA-1 仍然有一些安全問題,所以比較完整的是SHA-2(支持512bits),和最新的SHA-3。
3、加密是一個(gè)互聯(lián)網(wǎng)非常關(guān)注的問題。加密技術(shù)本身具有非常寬泛的概念和技術(shù),同時(shí)它具有一個(gè)實(shí)時(shí)性的特點(diǎn),因?yàn)榛ヂ?lián)網(wǎng)的安全問題幾乎是時(shí)時(shí)刻刻在發(fā)生,因此需要大家及時(shí)經(jīng)常關(guān)注這些問題。
在我們的討論內(nèi)容中,我們僅討論一些和SIP關(guān)系比較緊密的話題,例如,證書,SIP和RTP,TLS,對(duì)SIP中繼的加密等問題。為什么需要加密? 加密的結(jié)果主要原因包括以下幾個(gè)方面的內(nèi)容:
以上這些問題都涉及了如何設(shè)置SIP安全策略的問題。所以,為了盡可能減少這些安全問題,只能通過對(duì)SIP加密和語音加密來增加通信的安全。
為了讓用戶對(duì)加密有一個(gè)比較全面的了解,首先,我們介紹一下關(guān)于證書的基本工作原理。
SIP證書原理是基于互聯(lián)網(wǎng)證書原理來實(shí)現(xiàn)的。讓我們看看具體的證書實(shí)現(xiàn)流程:
首先,用戶訪問購物網(wǎng)站,例如通過80端口。
網(wǎng)站會(huì)切換到HTTPS通過端口443 訪問購物網(wǎng)站。當(dāng)然,現(xiàn)在很多網(wǎng)站都使用了443 端口,用戶不需要訪問80端口。
購物網(wǎng)站發(fā)送一個(gè)public key,然后對(duì)其生成一個(gè)privite保存到服務(wù)器端。
終端用戶通過瀏覽器和public key自動(dòng)生成一個(gè)新的key消息,然后發(fā)送到服務(wù)器端,服務(wù)器端通過這個(gè)消息,然后結(jié)合保存在服務(wù)器端的previte key 進(jìn)行匹配檢查。如果雙方的key匹配,則進(jìn)行購物付款交易。
目前,網(wǎng)絡(luò)上有很多網(wǎng)絡(luò)安全的公司提供免費(fèi)的和商業(yè)的安全證書,用戶可以通過購買這些安全證書來部署到自己的網(wǎng)絡(luò)環(huán)境中。以下圖例就是一個(gè)商業(yè)網(wǎng)站購買證書以后的流程處理:
服務(wù)器購買了商業(yè)證書以后,如果用戶訪問此服務(wù)器,服務(wù)器就會(huì)發(fā)送一個(gè)public key要求進(jìn)行證書的核實(shí),終端用戶需要訪問第三方的證書發(fā)放機(jī)構(gòu)來驗(yàn)證是否是有效的證書。如果是否都驗(yàn)證了證書的有效性,則執(zhí)行下一步的流程。一般,用戶終端會(huì)接受一些著名機(jī)構(gòu)發(fā)放的證書,有時(shí)會(huì)彈出對(duì)話框,用戶需要點(diǎn)擊瀏覽器對(duì)話框接受此證書。當(dāng)然,證書包括了證書發(fā)放者名稱,版本,subject,有效期,算法等修改參數(shù)。如果證書失效或者其他參數(shù)不兼容,則需要用戶重新安裝。
另外一種發(fā)放證書的模式就是自簽的證書,顧名思義,就是用戶服務(wù)器端用戶自己創(chuàng)建的證書。以下圖例說明了如何實(shí)現(xiàn)自簽證書的流程。
客戶端需要接受服務(wù)器端的證書以便保證證書的有效性。這里,筆者要提醒用戶,自簽的證書一般僅使用在測試環(huán)境,它的兼容性不好,同時(shí)可能導(dǎo)致其他的安全漏洞。
在本章節(jié)的介紹中,我們討論了認(rèn)證和簽權(quán)的流程和各自的不同,401和407消息,最后介紹了SIP網(wǎng)絡(luò)安全中的證書的基本原理。在后續(xù)的講座中,我們會(huì)繼續(xù)介紹SIP和RTP加密,TLS的其他技術(shù)。
關(guān)注微信號(hào):asterisk-cn 獲得有價(jià)值的行業(yè)新聞和技術(shù)分享,訪問技術(shù)論壇獲得開源融合通信的技術(shù)幫助:www.issabel.cn/forum
參考鏈接:
https://www.ietf.org/rfc/rfc2617.txt