在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 解析XMPP協(xié)議分析與應(yīng)用

            解析XMPP協(xié)議分析與應(yīng)用

            作者: 時(shí)間:2011-09-16 來源:網(wǎng)絡(luò) 收藏
            3 安全機(jī)制

            本文引用地址:http://www.biyoush.com/article/155743.htm

              3.1 簡單認(rèn)證和安全層協(xié)商機(jī)制

              簡單認(rèn)證和安全層(Simple Authentication and Security Layer,SASL)可以為基于連接的加入認(rèn)證機(jī)制,提供KERBEROS_V4、PLAIN和DIGEST-MD5等多種認(rèn)證方法。每種認(rèn)證機(jī)制包含認(rèn)證機(jī)制名、認(rèn)證過程初始化命令、認(rèn)證控制命令、特定8位碼和解釋器等信息。

              在認(rèn)證過程中,認(rèn)證服務(wù)器完成認(rèn)證、授權(quán)標(biāo)識(shí)傳送、簡單認(rèn)證和安全層協(xié)商3個(gè)方面的工作。在中,SASL處理步驟如下(C:客戶端,S:SASL認(rèn)證服務(wù)器):

             ?。?)C、S之間建立連接。(2)S向C提供認(rèn)證機(jī)制列表。(3)C在認(rèn)證機(jī)制列表中選擇一種認(rèn)證機(jī)制。(4)S向C詢問授權(quán)信息。(5)C向S提交授權(quán)信息。(6)S向C返回認(rèn)證成功或失敗信息。

              3.2 回?fù)苷J(rèn)證

              在通信過程中,2個(gè)服務(wù)器之間經(jīng)常需要通信,為避免利用服務(wù)器欺騙方式進(jìn)行信息偽造, 采用了回?fù)苷J(rèn)證機(jī)制?;?fù)苷J(rèn)證依靠DNS技術(shù)完成,利用回?fù)苷J(rèn)證機(jī)制,一個(gè)服務(wù)器可以確認(rèn)與自己建立連接的服務(wù)器是否經(jīng)過合法授權(quán),回?fù)苷J(rèn)證過程為:(1)源服務(wù)器和接收服務(wù)器建立連接,并向接收服務(wù)器請(qǐng)求認(rèn)證。接收服務(wù)器回應(yīng),并分配認(rèn)證會(huì)話ID。(2)源服務(wù)器向接收服務(wù)器發(fā)送認(rèn)證密鑰。(3)接收服務(wù)器與認(rèn)證服務(wù)器建立連接。認(rèn)證服務(wù)器同時(shí)為該認(rèn)證會(huì)話分配一個(gè)驗(yàn)證會(huì)話ID。(4)接收服務(wù)器把源服務(wù)器提交來的密鑰和驗(yàn)證會(huì)話ID 發(fā)送給認(rèn)證服務(wù)器,請(qǐng)求驗(yàn)證。(5)認(rèn)證服務(wù)器驗(yàn)證密鑰,并給接收服務(wù)器返回認(rèn)證結(jié)果。(6)接收服務(wù)器給源服務(wù)器返回認(rèn)證結(jié)果。

              3.3 加 密

              雖然SASL提供了先進(jìn)的認(rèn)證機(jī)制,通信雙方必須經(jīng)過特定的授權(quán)認(rèn)證才能進(jìn)行正常通信,但是登錄信息一般都是密碼和用戶名等重要信息,它們大多采用明文方式傳送,因此很容易被竊聽。為解決該問題,XMPP采用基于傳輸層安全的“STARTTLS”擴(kuò)展來為通信雙方提供機(jī)密性和數(shù)據(jù)完整性服務(wù)。TLS 包括兩個(gè)協(xié)議組DD TLS 記錄協(xié)議和 TLS 握手協(xié)議DD每組具有很多不同格式的信息。TLS 記錄協(xié)議是一種分層協(xié)議。每一層中的信息可能包含長度、描述和內(nèi)容等字段。記錄協(xié)議支持信息傳輸、將數(shù)據(jù)分段到可處理塊、壓縮數(shù)據(jù)、 MAC 、加密以及傳輸結(jié)果等。對(duì)接收到的數(shù)據(jù)進(jìn)行解密、校驗(yàn)、解壓縮、重組等,然后將它們傳送到高層客戶機(jī)。TLS 連接狀態(tài)指的是TLS 記錄協(xié)議的操作環(huán)境。它規(guī)定了壓縮算法、加密算法和 MAC 算法。TLS 記錄層從高層接收任意大小無空塊的連續(xù)數(shù)據(jù)。密鑰計(jì)算:記錄協(xié)議通過算法從握手協(xié)議提供的安全參數(shù)中產(chǎn)生密鑰、 IV 和 MAC 密鑰。TLS 握手協(xié)議由三個(gè)子協(xié)議組構(gòu)成,允許對(duì)等雙方在記錄層的安全參數(shù)上達(dá)成一致、自我認(rèn)證、例示協(xié)商安全參數(shù)、互相報(bào)告出錯(cuò)條件。

              TLS協(xié)議框架主要有2個(gè)層次的協(xié)議:TLS握手協(xié)議和TLS記錄協(xié)議。TLS握手協(xié)議用來讓服務(wù)器與客戶在傳輸層數(shù)據(jù)之前交換TLS協(xié)議版本信息、協(xié)商加密算法、進(jìn)行(相互)身份認(rèn)證并交換密鑰。TLS記錄協(xié)議用來將層提供的信息進(jìn)行分組、壓縮、數(shù)據(jù)完整性檢查和加密。數(shù)據(jù)完整性檢查通過比較傳輸前后使用安全散列函數(shù)(如SHA和MD5 等)計(jì)算出來的數(shù)據(jù)的MAC值是否一致來完成。數(shù)據(jù)加密采用對(duì)稱密碼算法(如R4和DES等)。對(duì)數(shù)據(jù)進(jìn)行完整性檢查和加密的密鑰由TLS握手協(xié)議來協(xié)商。

              XMPP中采用的STARTTLS擴(kuò)展處理流程如下(C:客戶端,S:TLS服務(wù)器):

             ?。?)C、S之間建立XML流會(huì)話連接。

              (2)S 向C 發(fā)送STARTTLS擴(kuò)展服務(wù)需求及支持的其他認(rèn)證機(jī)制列表,代碼實(shí)例如下:

              stream:features>

              starttls xmlns=′urn:ietf:params:xml:ns:xmpp-tls′>

              required/>

              /starttls>

              mechanisms xmlns=′urn:ietf:params:xml:ns:xmppsasl′>

              mechanism>DIGEST-MD5/mechanism>

              mechanism>PLAIN/mechanism>

              /mechanisms>

              /stream:features>

             ?。?)C發(fā)送STARTTLS命令給S。

             ?。?)C、S中TLS握手協(xié)議開始協(xié)商相關(guān)加密算法及密鑰。

             ?。?)若TLS握手協(xié)議協(xié)商成功,則關(guān)閉當(dāng)前XML流會(huì)話,C發(fā)起一個(gè)新的XML流會(huì)話,所有傳送的信息均被TLS記錄協(xié)議加密。TLS握手協(xié)議協(xié)商不成功則發(fā)出警告信息。

             ?。?)S向C回復(fù)新XML流會(huì)話。

              4 客戶端程序設(shè)計(jì)中的關(guān)鍵問題

              由于網(wǎng)絡(luò)中已存在大量的XMPP服務(wù)器,在一般的應(yīng)用開發(fā)中,只要設(shè)計(jì)自定功能的客戶端程序即可,并可以選用Smack庫來加速開發(fā)。

             ?。?)創(chuàng)建一個(gè)XMPP連接。因?yàn)閄MPP使用TCP協(xié)議,所以首先必須創(chuàng)建一個(gè)網(wǎng)絡(luò)連接,XMPPConnection就是Smack庫用來創(chuàng)建與XMPP服務(wù)器連接的類,創(chuàng)建一個(gè)XMPP連接的代碼如下:

              XMPPConnection connection=new XMPPConnection(″jab-

              ber.org″);

              如要?jiǎng)?chuàng)建加密連接,可以使用SSLXMPPConnection類:

              XMPPConnection connection=new SSLXMPPConnection(″jabber.org″);

             ?。?)登錄。TCP連接創(chuàng)建后,需要使用用戶名和密碼登錄到XMPP服務(wù)器,登錄程序可以使用XMPPConnection.login(String username,String password)方法。登錄后就可以和其他人聊天。

              connection.login(″yb″,″password″);//connection為已創(chuàng)建的XMPP連接,下同

              connection.createChat(″[email protected]″)。sendMessage

             ?。?Prime;Hello!″);

             ?。?)操作名冊。每個(gè)用戶都包括:一個(gè)XMPP地址(如mailto:%E2%80%[email protected]”)、名稱或昵稱(如″yb″),及其所屬列表(如好友、同事等)。名冊能夠跟蹤好友或某用戶組是否在線及其狀態(tài)信息,登錄后,可以使用Roster類來取得好友或某用戶組的狀態(tài),代碼如下:

              Roster roster=con.getRoster( );

              for (Iterator i=roster.getEntries( );i.hasNext( ); ) {

              System.out.println(i.next( ));}

              名冊信息通常是隨時(shí)變化的,可能需要增加或刪除。要監(jiān)聽名單及其在線狀態(tài)的改變,可以使用RosterListener。

              (4)發(fā)送和接收消息。發(fā)送接收消息可以使用Chat和GroupChat類。下面介紹如何使用Chat發(fā)送文本消息,GroupChat的使用方法類似。

              Chat newChat=connection.createChat(″[email protected]″);//創(chuàng)建新Chat

              newChat.sendMessage(″Hello!″);//發(fā)送消息″Hello!″

              利用Chat.sendMessage( )方法可以方便地創(chuàng)建一個(gè)消息對(duì)象,它的參數(shù)就是消息內(nèi)容,執(zhí)行后消息會(huì)發(fā)送出去。

              Chat newChat=connection.createChat(″[email protected]″);

              newMessage.setBody(″Hi, I′m waiting for you.″);

              while (true) {

              Message message=newChat.nextMessage( );//等待對(duì)方發(fā)送消息

              newChat.sendMessage(message.getBody());//把對(duì)方

              }//發(fā)送來的消息發(fā)回去

             ?。?)修改狀態(tài)。要修改狀態(tài)可以用presence.Type.UNAV-ILABLE作為參數(shù)創(chuàng)建一個(gè)presence,狀態(tài)將改變?yōu)椴辉诰€狀態(tài)。

              Presence presence=new Presence(Presence.Type.UNAVAILABLE);

              presence.setStatus(″Gone skating″);

              5 結(jié)束語

              目前,全球有20萬個(gè)即時(shí)通信平臺(tái)支持XMPP,有1 000萬人在使用。簡單的接口、開放的協(xié)議、互聯(lián)的架構(gòu)、權(quán)威的標(biāo)準(zhǔn)再加上堅(jiān)實(shí)的用戶基礎(chǔ)是XMPP的優(yōu)勢。


            上一頁 1 2 下一頁

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉