亚洲综合伊人,成人欧美一区二区三区视频不卡,欧美日韩在线高清,日韩国产午夜一区二区三区,大胆美女艺术,一级毛片毛片**毛片毛片,你瞅啥图片

您當(dāng)前的位置是:  首頁 > 資訊 > 文章精選 >
 首頁 > 資訊 > 文章精選 >

詳解外網(wǎng)SIP呼叫的SBC/IPPBX認(rèn)證流程

2019-04-18 09:41:01   作者:james.zhu   來源:Asterisk微信公眾號   評論:0  點(diǎn)擊:


  基于遠(yuǎn)端外網(wǎng)SIP呼叫和SBC部署的環(huán)境越來越普及。在最新的企業(yè)IP通信網(wǎng)絡(luò)架構(gòu)中,如果沒有部署SBC的話,大部分的SIP軟交換和IPPBX都是在互聯(lián)網(wǎng)上裸奔,這樣對IPPBX的安全造成了很大影響。為了防止外網(wǎng)攻擊掃描,很多企業(yè)PBX用戶只能通過簡單的修改SIP端口來防止外網(wǎng)攻擊者的端口掃描。事實(shí)上,這樣的解決辦法不是一個(gè)真正的SIP安全解決辦法。為了防止SIP軟交換/IPPBX在公網(wǎng)上裸奔,關(guān)心安全的用戶則使用了SBC來解決安全問題。
  從多個(gè)應(yīng)用環(huán)境和其部署優(yōu)勢來說,SBC是目前解決SIP安全問題最有效的手段。SBC作為一個(gè)網(wǎng)絡(luò)邊界安全控制手段,IPPBX部署在內(nèi)網(wǎng)環(huán)境中,徹底將IPPBX的網(wǎng)絡(luò)拓?fù)潆[藏在內(nèi)網(wǎng)環(huán)境中。這樣就起到了安全的作用。因?yàn)镾BC的部署,很多外網(wǎng)終端或者移動終端,如果需要呼叫內(nèi)網(wǎng)的IPPBX時(shí),SBC和下游的其他服務(wù)器就會對SIP用戶進(jìn)行身份確認(rèn)。通常情況下,SIP呼叫使用了 Authentication Digest 的方式來進(jìn)行身份認(rèn)證。
  筆者在以前的文章中多次介紹了SBC的作用和其應(yīng)用場景,和關(guān)于SBC部署協(xié)議的文章,讀者可以查閱。
  目前使用SBC的場景很多,包括SIP trunk對接,遠(yuǎn)端外網(wǎng)SIP終端注冊,呼叫,運(yùn)營商之間的對接服務(wù),IPPBX托管中心的SBC對接。因此,使用配置方式也有所不同,不同的配置需要不同的認(rèn)證方式來實(shí)現(xiàn)。以下是幾個(gè)典型的示例:
  運(yùn)營商SIP trunk對接企業(yè)SBC
  托管IPPBX通過SBC對接外網(wǎng)企業(yè)電話終端
  運(yùn)營商之間SBC對接
  微軟365對接SBC
  今天,我們針對外網(wǎng)呼叫環(huán)境中關(guān)于SBC和其他下游服務(wù)器的認(rèn)證方式進(jìn)行一個(gè)比較詳細(xì)的分析,希望幫助讀者能夠徹底了解SBC配合IPPBX進(jìn)行身份認(rèn)證的流程機(jī)制,以便能夠在SBC部署時(shí)能夠及時(shí)排查問題。
  在下面的示例中,我們可以看到外網(wǎng)遠(yuǎn)端用戶呼叫SBC,然后呼叫到企業(yè)內(nèi)網(wǎng)IPPBX的典型示例(用戶可以下載免費(fèi)FreeSBC在阿里云部署,并且配合IPPBX或者免費(fèi)開源的freepbx實(shí)現(xiàn)外網(wǎng)注冊功能):
  在以上示例中,SBC部署在企業(yè)網(wǎng)絡(luò)的邊界處,內(nèi)網(wǎng)IPPBX實(shí)現(xiàn)應(yīng)用功能。但是,還有一些企業(yè)內(nèi)網(wǎng)的部署環(huán)境,因?yàn)闃I(yè)務(wù)控制復(fù)雜的原因,可能增加了代理服務(wù)器的處理,然后下掛多個(gè)IPPBX。
  簡單來說,在這種典型的外網(wǎng)呼叫的場景中,外網(wǎng)的SIP賬號首先需要對SBC發(fā)起一個(gè)INVITE,然后雙方通過Authentication Digest 認(rèn)證確認(rèn)。如果SBC通過了外網(wǎng)用戶Alice的呼叫認(rèn)證,則SBC繼續(xù)對內(nèi)網(wǎng)Proxy發(fā)送P-Asserted-Identity,然后IPPBX確認(rèn)其身份以后,雙方SIP分機(jī)創(chuàng)建呼叫流程。為了說明以上示例的流程,我們會分步介紹每個(gè)階段使用的認(rèn)證方式和SIP信令的處理。
  1、Digest Authentication相關(guān)概念
  在介紹整個(gè)SIP user authentication的處理機(jī)制之前,我們首先介紹幾個(gè)和認(rèn)證相關(guān)的概念。這些概念可以幫助讀者能夠快速了解認(rèn)證的基礎(chǔ)知識。SIP認(rèn)證的方式場景有兩種,一種是代理,轉(zhuǎn)發(fā)服務(wù)或者注冊服務(wù)器對UA的認(rèn)證;另外一種是UA之間的互相認(rèn)證。
  我們文章中使用的是Digest Authentication的認(rèn)證機(jī)制,這種機(jī)制相對比較簡單,它基于HTTP的一種質(zhì)疑/響應(yīng)的模式。一方會對另一方發(fā)送質(zhì)疑詢問,另外一方則通過響應(yīng)的方式來應(yīng)答核實(shí)其身份。
  研究人員QiQiu的研究生文章Digest Authentication Report有關(guān)于認(rèn)證流程和SIP學(xué)習(xí)的文章的介紹,讀者可以下載閱讀:
  Digest Authentication Report
  https://www.site.uottawa.ca/~bob/gradstudents/DigestAuthenticationReport.pdf
  Digest Authentication使用了MD5 hash算法對用戶名稱,密碼,realm和Digest URL計(jì)算出一個(gè)哈希值,服務(wù)器端生成一個(gè)一次性的nonce,雙方對比最終的reponse值確認(rèn)其身份。因?yàn)槠蛢?nèi)容重點(diǎn)不同,我們這里僅簡單介紹其背景基礎(chǔ)知識,RFC2069給出了非常完整的示例,讀者可以對其流程細(xì)節(jié)做進(jìn)一步的了解。
  關(guān)于如何計(jì)算這些哈希值,讀者可以通過很多網(wǎng)絡(luò)工具做計(jì)算,發(fā)布讀者在實(shí)際場景中能夠完整了解response的生成。示例是如何計(jì)算reponse值:
  根據(jù)以上工具,在實(shí)際的SIP注冊消息中也同樣生成了和工具計(jì)算相同的值:
  具體雙方生成生成響應(yīng)的處理流程,讀者可以參考以下示例:
  在Linux環(huán)境下,用戶可以使用MD5的命令來生成響應(yīng)消息內(nèi)容,工具也非常簡單易用:

  在RFC2617中,為了增加安全認(rèn)證的可靠性,支持了客戶端生成的nonce和QoP。具體的實(shí)現(xiàn)方式如下:
  Response = MD5(H1 : nonce : nonceCount : nonceClient : QoP : H2)
  筆者不是安全方面的專家,如果讀者想進(jìn)一步學(xué)習(xí)關(guān)于SIP安全認(rèn)證的相關(guān)話題,網(wǎng)絡(luò)上有很多關(guān)于SIP Digest 認(rèn)證的討論和MD5安全分析,讀者可以參考相關(guān)鏈接來進(jìn)一步學(xué)習(xí)。
  2、SIP呼叫/SBC/Proxy/IPPBX流程
  通過上一個(gè)章節(jié)對SIP認(rèn)證的基本介紹和其認(rèn)證機(jī)制的討論,讀者應(yīng)該可以理解基本的認(rèn)證原理。接下來,我們會比較詳細(xì)地結(jié)合實(shí)際的示例來進(jìn)一步分析其細(xì)節(jié)過程。
  這里提醒讀者,以上示例僅說明了身份認(rèn)證機(jī)制的流程,并沒有包括我們具體討論的具體的其他部署的服務(wù),例如SBC,代理和IPPBX等SIP服務(wù)器。具體的環(huán)境中,我們將涉及SBC,代理和IPPBX,也可能僅包括SBC和IPPBX本身。
  在以上的示例中,首先外網(wǎng)SIP終端需要對SBC發(fā)起一個(gè)INVITE請求,SBC回復(fù)407或者401對其終端進(jìn)行核實(shí)認(rèn)證。外網(wǎng)SIP呼叫通過SBC認(rèn)證后,SBC對Proxy發(fā)送認(rèn)證P-Asserted-Identity,如果通過則繼續(xù)其他的流程,包括代理對終端的再次雙方確認(rèn)和IPPBX對分機(jī)的身份確認(rèn)等流程。這里,因?yàn)槠年P(guān)系,我們重點(diǎn)介紹外網(wǎng)SIP呼叫中SBC的身份認(rèn)證過程,SBC對代理或IPPBX的P-Asserted-Identity身份確認(rèn),代理對SIP分機(jī)的認(rèn)證機(jī)制。其他步驟基本上重復(fù)了代理對分機(jī)的認(rèn)證流程,所以不再做過多討論。
  接下來,我們就指定具體的關(guān)于外網(wǎng)SIP終端如何通過SBC呼叫內(nèi)網(wǎng)IPPBX分機(jī)做一個(gè)詳細(xì)介紹。大家知道,SBC是對呼叫方身份認(rèn)證的第一道防線。首先呼叫方對SBC發(fā)送INVITE,SBC返回407 帶nonce,僅支持本呼叫方,僅使用一次的驗(yàn)證nonce。呼叫方收到以后,返回ACK。緊接著,使用這個(gè)nonce結(jié)合用戶名稱和密碼計(jì)算出response,SBC也同時(shí)計(jì)算出這個(gè)response。如果雙方的resposne一致,說明呼叫方可以通過SBC的身份驗(yàn)證。下面的章節(jié)中,我們重點(diǎn)對外網(wǎng)呼叫SBC時(shí)的認(rèn)證過程做一個(gè)討論。
  3、外網(wǎng)SIP呼叫SBC端身份認(rèn)證
  在上面的介紹中,我們知道外網(wǎng)SIP分機(jī)如果呼叫企業(yè)邊界的SBC時(shí),首先需要SBC對其身份進(jìn)行核實(shí)認(rèn)證。通過其身份認(rèn)證機(jī)制,才能保證外網(wǎng)呼叫SBC是一個(gè)安全的呼叫,否則SBC不會允許外網(wǎng)的任何SIP終端呼叫內(nèi)網(wǎng)的IPPBX,解決了內(nèi)網(wǎng)的IPPBX的安全問題,F(xiàn)在,讓我們看看外網(wǎng)SIP是如何一步步進(jìn)行呼叫驗(yàn)證,最終完成外網(wǎng)SIP分機(jī)和SBC之間的身份確認(rèn)流程的。
  首先,外網(wǎng)SIP分機(jī)呼叫SBC,SBC返回一個(gè)407 響應(yīng)。這里的響應(yīng)消息中攜帶了SBC生成的nonce值,結(jié)合外網(wǎng)SIP的realm等參數(shù)計(jì)算的結(jié)果。讀者一定要注意Proxy-Authenticate Digest中所包括對計(jì)算參數(shù)。
  其次,外網(wǎng)SIP分機(jī)收到401或者407響應(yīng)后,緊接著對SBC發(fā)送一個(gè)ACK,確認(rèn)收到407響應(yīng)。然后,SIP分機(jī)馬上對SBC再次發(fā)送一個(gè)新的INVITE請求(注意下面示例中的Call-ID是完全不同的ID),這次的請求中攜帶了SIP分機(jī)所生成的所有驗(yàn)證的相關(guān)消息。這里,最重要的步驟是外網(wǎng)SIP分機(jī)根據(jù)SBC返回的nonce結(jié)合本地SIP賬號信息,使用MD5計(jì)算出的response。在INVITE中發(fā)送了生成的response結(jié)果。
  最后,筆者在下圖中給出了SBC計(jì)算response的計(jì)算流程。在SBC邊界控制器中,SBC根據(jù)407的生成的nonce, 結(jié)合上次收到的用戶賬號消息,計(jì)算出SBC本地生成的response(42ceXXXX),然后對比SIP分機(jī)INVITE中包含的response(42ceXXXXX)結(jié)果,如果兩個(gè)結(jié)果是一樣的,說明外網(wǎng)SIP終端的呼叫身份是安全的,可以認(rèn)為是成功的驗(yàn)證,SBC則允許SIP呼叫通過SBC服務(wù)器端。
  通過雙方response的結(jié)果對比,SBC確認(rèn)了這個(gè)外網(wǎng)SIP呼叫的安全性,因此,SBC可以允許這個(gè)INVITE呼叫繼續(xù)進(jìn)入到Proxy的節(jié)點(diǎn)上。
  4、SBC到Proxy使用P-Asserted-Identity
  根據(jù)上一節(jié)點(diǎn)介紹,SBC通過response的結(jié)果對比,確認(rèn)了這個(gè)呼叫的身份,所以,SBC就會把這個(gè)請求繼續(xù)轉(zhuǎn)發(fā)到Proxy的處理中。這里筆者提醒讀者,一般來說,SBC的下游服務(wù)器可能直接面對的是IPPBX或其他SIP服務(wù)器,因?yàn)闃I(yè)務(wù)的關(guān)系,這里的示例中增加了Proxy的處理,事實(shí)上,SBC也可以直接面對IPPBX應(yīng)用服務(wù)器。
  盡管大部分情況下,內(nèi)網(wǎng)的Proxy對SBC的身份是信任的。但是,因?yàn)镾BC是一個(gè)網(wǎng)絡(luò)邊界設(shè)備,所以,Proxy很多情況下也需要對SBC發(fā)送過來的呼叫進(jìn)行二次確認(rèn)。在SBC對Proxy的身份確認(rèn)中,通常SBC會對Proxy發(fā)送一個(gè)P-Asserted-Identity header參數(shù),表示其SIP呼叫是從SBC過來的,對這個(gè)呼叫攜帶一個(gè)新的數(shù)值,SBC已經(jīng)對其進(jìn)行了身份確認(rèn),其用戶是可信任的,請求Proxy通過這個(gè)SIP呼叫的身份確認(rèn)。Proxy看到是SBC過來的可信任的SIP呼叫,對比Proxy自己保存的AOR值,Proxy就會通過這個(gè)認(rèn)證。
  注意,這里的認(rèn)證僅是Proxy對SBC的確認(rèn)過程,并不能確認(rèn)Proxy是絕對信任這個(gè)呼叫的,不是Proxy對外網(wǎng)SIP呼叫的認(rèn)證。Proxy或者IPPBX還會繼續(xù)對SIP呼叫進(jìn)行認(rèn)證。在后續(xù)的內(nèi)容中,我們繼續(xù)介紹Proxy對SIP呼叫的身份確認(rèn)。
  在前面的討論中,我們涉及了P-Asserted-Identity,一般的SBC都支持通過P-Asserted-Identity認(rèn)證的方式。具體的官方定義如下(RFC3255-9.1):
  The P-Asserted-Identity header field is used among trusted SIP   entities (typically intermediaries) to carry the identity of the user    sending a SIP message as it was verified by authentication.
  https://www.ietf.org/rfc/rfc3325.txt
  P-Asserted-Identity不是一個(gè)標(biāo)準(zhǔn)的SIP core規(guī)范,它是一個(gè)私有的RFC3325。但是大部分的SBC設(shè)備軟件使用這個(gè)參數(shù)來確認(rèn)SIP用戶的安全認(rèn)證。另外,在很多配置場景中,我們可能會看到另外一個(gè)配置參數(shù)p-preferred-identity,它和P-Asserted-Identity有一些區(qū)別,很多讀者可能非常迷惑。關(guān)于兩者之間的區(qū)別,讀者可以查閱此鏈接:
  http://www.sharetechnote.com/html/Handbook_IMS_SIP_Param_P_Prefered_Identity.html
  以上兩種headers其實(shí)都來自于IMS規(guī)范中的P-CSCF SIP headers, SBC為了獲得很好的兼容性,當(dāng)然也需要支持這些headers:
  1. P-Called-Party-ID Header
  2. P-Orig-CA Header
  3. P-Charging-Vector Header
  4. P-Charging-Function-Addresses Header
  5. P-Associated-URI Header
  6. P-Visited-Network-ID Header
  7. P-Access-Network-Info Header
  8. P-Preferred-Identity and P-Asserted-Identity Header
  9. P-Charge-Info Header
  10. P-Sig-Info Header
  另外,關(guān)于P-Asserted-Identity的使用可以成為一個(gè)比較大的話題,很多技術(shù)論文專門對其使用場景有非常深入的討論,筆者水平有限,不能非常完整地給出這方面權(quán)威的結(jié)論。如果讀者有興趣做深入研究,可以查閱此論文:
  Updates to Asserted Identity in the Session Initiation Protocol (SIP)
  https://tools.ietf.org/id/draft-ietf-sipping-update-pai-08.html#rfc.section.3.1
  5、Proxy對SIP呼叫地址的再次驗(yàn)證
  在以上的討論中,SBC通過了Proxy的認(rèn)證,確認(rèn)其呼叫是可信任的。但是,很多情況下,因?yàn)镾BC和外網(wǎng)SIP呼叫都處于外網(wǎng)的邊界處,Proxy對外網(wǎng)進(jìn)入到呼叫地址重新驗(yàn)證。Proxy再次對SIP終端回復(fù)407,重新驗(yàn)證。這次驗(yàn)證的流程和SBC對SIP驗(yàn)證的流程是一樣的,需要根據(jù)雙方生成的response來判斷SIP呼叫身份。
  6、IPPBX對外網(wǎng)SIP呼叫的身份認(rèn)證
  根據(jù)以上幾個(gè)步驟的驗(yàn)證,現(xiàn)在身份驗(yàn)證流程可以繼續(xù)進(jìn)行到IPPBX的節(jié)點(diǎn)上了。在上面的介紹中,Proxy需要再次確認(rèn)外網(wǎng)的地址身份,再次對外網(wǎng)的呼叫重新經(jīng)過407認(rèn)證以后,SIP終端通過了認(rèn)證。接下來,Proxy才會繼續(xù)對下游IPPBX發(fā)送INVITE請求,IPPBX可能根據(jù)自己本身的認(rèn)證設(shè)置,再次對SIP呼叫進(jìn)行407認(rèn)證。所以,IPPBX需要重新對SIP終端結(jié)合本次呼叫,此用戶通過生成的nonce,再次進(jìn)行雙方的response結(jié)果對比流程,重新執(zhí)行一次在Proxy認(rèn)證時(shí)的流程。
  其邏輯流程和上面的基本一樣,所以這里不再列出。以上示例僅簡單說明最后一步流程的處理方式。雙方通過了IPPBX端的認(rèn)證。然后,IPPBX對雙方終端創(chuàng)建呼叫連接,雙方成功通話,到此,外網(wǎng)的SIP終端就可以和內(nèi)網(wǎng)的SIP終端進(jìn)行通話。一個(gè)完整的外網(wǎng)SIP呼叫通過SBC認(rèn)證,IPPBX的認(rèn)證的呼叫流程正式形成。
  7、總結(jié)
  在本次討論中,筆者專門針對外網(wǎng)SIP呼叫SBC和內(nèi)網(wǎng)IPPBX的呼叫流程做了比較詳細(xì)地分析。首先,筆者介紹了SBC對SIP的407的認(rèn)證機(jī)制和關(guān)于nonce和response,MD5的核實(shí)流程。然后,筆者再次介紹了SBC對內(nèi)網(wǎng)Proxy通過P-Asserted-Identity頭聲明其用戶身份的機(jī)制,并且簡單介紹了關(guān)于P-CSCF SIP的幾個(gè)核心概念。接下來,筆者介紹了Proxy和IPPBX對SIP分機(jī)呼叫的407認(rèn)證流程,最后,筆者介紹了IPPBX到內(nèi)網(wǎng)終端的呼叫創(chuàng)建。
  讀者可以看到,整個(gè)呼叫流程中,SBC扮演著核心身份認(rèn)證的作用,它是SIP網(wǎng)絡(luò)環(huán)境中第一道安全機(jī)制,因此需要用戶特別注意。此外,因?yàn)榄h(huán)境配置的復(fù)雜性和外網(wǎng)用戶的身份和地址等問題,需要經(jīng)過多次驗(yàn)證才能完全保證外網(wǎng)呼叫的安全。
  最后,SBC的配置場景很多,需要根據(jù)不同的場景做針對性的測試,因此,筆者僅說明了外網(wǎng)SIP呼叫的認(rèn)證機(jī)制,其他方面的內(nèi)容沒有過多涉及,希望讀者自己根據(jù)基本的機(jī)制做補(bǔ)充學(xué)習(xí)。當(dāng)然,讀者也可以下載我們合作伙伴FreeSBC的免費(fèi)SBC系統(tǒng),在阿里云部署,并且結(jié)合自己的IPPBX直接對接測試。
  參考資料:
  https://www.vocal.com/sip-2/sip-user-authentication/
  https://arxiv.org/ftp/arxiv/papers/1209/1209.1075.pdf
  https://en.wikipedia.org/wiki/Challenge%E2%80%93response_authentication
  https://github.com/miconda/md5ha1
  https://allenluker.wordpress.com/2014/07/16/sip-digest-authentication-part-1-sip-registration-method/
  https://www.sipsorcery.com/mainsite/Help/SIPPasswordSecurity
  https://docs.telcobridges.com/tbwiki/FreeSBC:Remote_Workers
  作者簡介
  朱利中(james.zhu)先生供職于深圳星昊通科技有限公司,從事技術(shù)市場推廣工作。在Asterisk開源領(lǐng)域服務(wù)10年,在國外學(xué)習(xí)工作9年。先后任職于Digium亞太合作伙伴公司,OpenVOX,深圳鼎信通達(dá)有限公司。在2010年,朱利中和合作伙伴聯(lián)合發(fā)起舉辦了第一屆Asterisk中國官方大會,負(fù)責(zé)VOIP88 開源技術(shù)社區(qū)維護(hù),并聯(lián)合發(fā)布了Elastix中文版本,個(gè)人翻譯發(fā)布了第一本FreePBX使用指南。 目前負(fù)責(zé)Sangoma 亞太地區(qū)的銷售和市場推廣工作。
   


  關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
  Asterisk freepbx 中文官方論壇:http://bbs.freepbx.cn/forum.php
  Asterisk freepbx技術(shù)文檔: www.freepbx.org.cn
  融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
  Asterisk/FreePBX中國合作伙伴,官方qq技術(shù)分享群(3000千人):589995817

【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點(diǎn)判斷保持中立,不對所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

專題

CTI論壇會員企業(yè)