新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 解析XMPP協議分析與應用

        解析XMPP協議分析與應用

        作者: 時間:2011-09-16 來源:網絡 收藏
        3 安全機制

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

          3.1 簡單認證和安全層協商機制

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

          在認證過程中,認證服務器完成認證、授權標識傳送、簡單認證和安全層協商3個方面的工作。在中,SASL處理步驟如下(C:客戶端,S:SASL認證服務器):

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

          3.2 回撥認證

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

          3.3 加 密

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

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

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

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

          (2)S 向C 發送STARTTLS擴展服務需求及支持的其他認證機制列表,代碼實例如下:

          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發送STARTTLS命令給S。

         ?。?)C、S中TLS握手協議開始協商相關加密算法及密鑰。

          (5)若TLS握手協議協商成功,則關閉當前XML流會話,C發起一個新的XML流會話,所有傳送的信息均被TLS記錄協議加密。TLS握手協議協商不成功則發出警告信息。

         ?。?)S向C回復新XML流會話。

          4 客戶端程序設計中的關鍵問題

          由于網絡中已存在大量的XMPP服務器,在一般的應用開發中,只要設計自定功能的客戶端程序即可,并可以選用Smack庫來加速開發。

         ?。?)創建一個XMPP連接。因為XMPP使用TCP協議,所以首先必須創建一個網絡連接,XMPPConnection就是Smack庫用來創建與XMPP服務器連接的類,創建一個XMPP連接的代碼如下:

          XMPPConnection connection=new XMPPConnection(″jab-

          ber.org″);

          如要創建加密連接,可以使用SSLXMPPConnection類:

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

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

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

          connection.createChat(″yb@sdpt.com″)。sendMessage

         ?。?Prime;Hello!″);

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

          Roster roster=con.getRoster( );

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

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

          名冊信息通常是隨時變化的,可能需要增加或刪除。要監聽名單及其在線狀態的改變,可以使用RosterListener。

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

          Chat newChat=connection.createChat(″yb@sdpt.com″);//創建新Chat

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

          利用Chat.sendMessage( )方法可以方便地創建一個消息對象,它的參數就是消息內容,執行后消息會發送出去。

          Chat newChat=connection.createChat(″yb@sdpt.com″);

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

          while (true) {

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

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

          }//發送來的消息發回去

          (5)修改狀態。要修改狀態可以用presence.Type.UNAV-ILABLE作為參數創建一個presence,狀態將改變為不在線狀態。

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

          presence.setStatus(″Gone skating″);

          5 結束語

          目前,全球有20萬個即時通信平臺支持XMPP,有1 000萬人在使用。簡單的接口、開放的協議、互聯的架構、權威的標準再加上堅實的用戶基礎是XMPP的優勢。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绥宁县| 通州市| 泰宁县| 庄河市| 惠东县| 永春县| 南京市| 白水县| 上虞市| 溆浦县| 德江县| 三门峡市| 湘乡市| 克拉玛依市| 夏邑县| 长汀县| 北辰区| 通道| 鄂州市| 宁晋县| 濮阳市| 衡水市| 东明县| 萨嘎县| 乌审旗| 西充县| 漠河县| 泸定县| 凤翔县| 清徐县| 武乡县| 鄱阳县| 仙桃市| 海丰县| 莎车县| 永昌县| 尼玛县| 高密市| 肇东市| 彩票| 观塘区|