XMPP3920最靠譜的中文翻譯文檔_第1頁
XMPP3920最靠譜的中文翻譯文檔_第2頁
XMPP3920最靠譜的中文翻譯文檔_第3頁
XMPP3920最靠譜的中文翻譯文檔_第4頁
XMPP3920最靠譜的中文翻譯文檔_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、XMPP 3920 最靠譜的中文翻譯文檔(一)xmpp協(xié)議之可擴展消息出席協(xié)議:核心 RFC 3920摘要:此文檔定義了可擴展消息出席協(xié)議(XMPP的核心特性:協(xié)議使用XML元素在任意兩個網(wǎng)絡(luò)端點間近實時的交換結(jié)構(gòu)化信息。當XMPP為交換XML數(shù)據(jù)提供一般化,可擴展的框架時,它主要用于建立滿足RFC2779的即時消息與出席應用的需求。1 介紹1.1 概要XMPP 是一個開放的可擴展標記語言 XML協(xié)議,用于近實時的消息、出席與請求 - 響應服務。基本語法語義最初是由 Jabber開源社區(qū)在1999年開 發(fā)的。2002年,XMPPT作 組授權(quán)開發(fā)一個Jabber協(xié)議的改寫本,將適用于 IETF的

2、即時消息(IM)與出席技術(shù)。作為XMPPT作組的成果,此文檔定義了 XMPPI.0的核心內(nèi)容;提供即時消息與出席功能的擴展需求定義在 RFC2779IM-REQS中,由XMPP即時消息與出席XMPP-IM指定。1.2 術(shù)語文檔中的大寫關(guān)鍵字: "MUST", "MUSTNOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULDIOT", "RECOMMENDED'MAY",

3、 "OPTIONAL"在 BCP14,在 RFC2119 TERMS 中描述。2 一般架構(gòu)2.1 概述雖然XMPP并未與任何特定網(wǎng)絡(luò)架構(gòu)結(jié)合,但到目前為止,它大致上已經(jīng)由一個客戶-服務器的架構(gòu)實現(xiàn)了。 其中,客戶端利用XMPP訪問基于TCP連接的一個服務器,并且, 服務器間也通過TCP連接進行彼此間的通信。XMPPClientServerServerTCPTCP下圖為此架構(gòu)的高層視圖(“-”表示使用XMPP通信,“=”表示使用任何其它協(xié)議通信)C1S1-S2-C3|C2+-G1=FN1=FC1符號表示如下:1)C1 , C2, C3 = XMPP客戶端2)S1 , S2 =

4、 XMPP服務器3) G1 =網(wǎng)關(guān):在XMPP與外部協(xié)議(非 XMPP的消息網(wǎng)絡(luò)間轉(zhuǎn)換。4)FN1 = 外部消息網(wǎng)絡(luò)5)C1 = 外部消息網(wǎng)絡(luò)的客戶端2.2 服務器服務器作為XMPP通信擔當智能抽象層。它的主要責任是:1) 管理連接其它實體的會話,以XML流格式(第4節(jié))在已授權(quán)的客戶端、服務器以及其 它實體間來回傳送。2) 通過XML流在實體間路由具有合適地址的XML節(jié)(第9節(jié))。大多數(shù)與XMPP兼容的服務器設(shè)想有能力存儲客戶端的數(shù)據(jù)(例:基于XMPP即時消息與出席應用的用戶的聯(lián)系列表);在這種情況下,XML數(shù)據(jù)由服務器自身代表客戶端直接處理,并不路由到其它實體。2.3 客戶端大多數(shù)客戶端通

5、過TCP連接直接連到服務器,并且使用 XMPP充分利用由服務器 及任何相關(guān)服務所提供的功能。多種資源(例如:設(shè)備或位置)可能代表每個被授權(quán)客戶端同時連到服務器上。每個資源均由定義在地址方案(第3節(jié))下的XMPP地址的資源標識符來區(qū)別(例如: < url=mailto:nodedomain/homenodedomain/home/url> vs.<url=mailto:nodedomain/worknodedomain/work/url>)??蛻舳伺c服務器的推薦連接端口為5222,已由IANA注冊(參考端口編號(15.9節(jié))。2.4 網(wǎng)關(guān)網(wǎng)關(guān)是服務器端的一種特殊服務,它的

6、主要功能是將XMPP翻譯成外部消息系統(tǒng)所使用的協(xié)議(非XMPP,也可將數(shù)據(jù)翻譯回 XMPP例如EMAIL網(wǎng)關(guān)(參考SMTP),In ternet Relay Chat (參考IRC),SIMPLE (參考SIIMPLE,Session Initiation Protocol for),短消息服務(SMS,遺留Instant Messaging and Presence Leveraging Extensions即時消息服務,諸如 AIM, ICQ, MSN Messenger,Yahoo! Instant Messenger。網(wǎng)關(guān)與服務器間的通信,網(wǎng)關(guān)與外部消息系統(tǒng)間的通信,均未在此文檔中定義

7、。2.5 網(wǎng)絡(luò)由于每個服務器由網(wǎng)絡(luò)地址指定, 并且由于服務器與服務器間的通信是客戶與服務 器協(xié)議的直接擴展,實際上,系統(tǒng)由互相通信的服務器網(wǎng)絡(luò)組成。舉個例 子, <url=mailto:julietjuliet/url> 能與 & lt;url=mailto:romeoromeo/url> 交換消息、出席,以及其 它 信息。這是使用網(wǎng)絡(luò)尋址標準的消息協(xié)議(例如SMTP )所熟悉的模式。任意兩服務器間的通信是可選的。如果可通信,此類通信就應當發(fā)生在綁定到TCP連接的XML流上。服務器間連接的推薦端口為5269,由IANA注冊(參考端口編號(15.9節(jié))3 尋址方案3.1

8、 概述實體可被看作是使用XMPP進行通信的任意網(wǎng)絡(luò)端點(例如:一個網(wǎng)絡(luò)上的ID )。任意此類實體均以與 RFC2396URI 致的格式來唯一設(shè)定地址。由于歷史原因,XMPP實體的地址稱作 Jabber 標識符或 JID 。一個有效 JID 包含一套有序元素:域標識符,結(jié)點標識 符,資源標識符。JID 的語法定義如下, 使用增廣巴斯科范式 ABNF( Augmented Backus-Naur Form)。(Ipv4地址與Ipv6地址規(guī)則定義在Ipv6的附錄B;符合結(jié)點規(guī)則的允許字符序列由Nodeprep profile of STRINGPREP定義,編入本文檔的附錄A;符合資源規(guī)則的允許字符

9、序列由Resourceprep profile of STRINGPREP定義,編入本文檔的附錄B;子域規(guī)則參考國際化域標識的概念,在 IDNA 中有述)。jid= node "" domain "/" resource domain= fqdn / address-literalfqdn= (sub-domain 1*("." sub-domain)sub-domain= (internationalized domain label)address-literal = IPv4address / IPv6address所有 JID

10、 均基于前述規(guī)則。此結(jié)構(gòu)最普通的用法就是用戶以<url=mailto:userhost/resourceuserhost /resource/url>形式標識一個即時消息用戶、用戶連接的服務器、用戶連接的資源(例如:特別的客戶端)。然而, 結(jié)點類型可能不僅是客戶端, 舉個例子, 一個提供多用戶聊天服務的特別聊天室,可以以 < url=mailto:roomserviceroomservice/url>(“room" 是聊天室名,“ service ”是多用 戶聊天服務的主機名) 作為地址。 并且, 此聊天室的特別擁有者可能以< url=mailto:ro

11、omservice/nickroomservice/nick/url>(“ nick ”是此擁有者的房間 昵稱) 作地址,許多其它 JID 類型均有可能 (例如: <domain/resource> 可能是一個服務 器端腳本或服務)。JID (結(jié)點標識符,域標識符,資源標識符)的每個可允許部分長度不準超過1023字節(jié),結(jié)果,最大總長度(包括 url=mailto: ' '/url , /'分隔符)為 3071 字節(jié)。3.2 域標識符域標識符是基本標識符,且是 JID 中僅有的一個必須的元素(僅有域標識符的 JID 是有效的) 。它通常表示網(wǎng)絡(luò)網(wǎng)關(guān)與“主

12、要的”服務器, 具有為其它實體間的 連接進行 XML 路由與數(shù)據(jù)管理的能力。 然而, 由域標識符作為參考的實體并不總是服務器, 它可能是一項 以服務器子域為地址的服務,提供多于服務器(例:多用戶聊天服務,用戶目錄,或外部消息系統(tǒng)的一個網(wǎng)關(guān))的功能。每個服務器或服務的域標識符將通過網(wǎng)絡(luò)進行通信,它可能是IP 地址,并應當是完全合法的域名(參考DNS)。域標識符必須是一個“國際化的域名”,定 義在IDNA, Nameprep NAMEPREP profile of stringprep STRINGPREP 可以無錯應用。比較兩個域標 識符之前,服務器必須(客戶端是應該) 首先對標簽(定義在 ID

13、NA )應用 Nameprep profile , 以補足每個標識符。3.3 節(jié)點標識符結(jié)點標識符是一個可選的輔助標識符,放在域標識符之前,后以url=mailto:' '/url 字符分隔。它通常表示實體請求與使用由服務器或網(wǎng)關(guān)(例如:一個客戶端)提供的網(wǎng)絡(luò)訪問,雖然它也能表示其它種類的實體(例如:有多用戶聊天服務功能的聊天室)。由結(jié)點標識符表示的實體,在特定域上下文中,在XMPP即時消息與出席應用中被加以地址,此類地址稱作“ bare JID ”,形式為<url=mailto:nodedomainnodedomain/url>結(jié)點標識符必須像 the Nodep

14、rep profile of STRINGPREP 這樣格式化,可以無錯應用。比較兩個結(jié)點標識符之前,服務器必須(客戶端應該)首先對每個標識符應用Nameprep profile 。3.4 資源標識符資源標識符是一個可選的第三位標識符,位于域標識符之后,后跟 / '作為分隔 符。資源標識符可以修改 < url=mailto:nodedomainnodedomain/url> 也可以只是 <doma in>地址。它通常表示 一個特別的會話、連接(例如:一個設(shè)備或位置),或?qū)儆趲?有節(jié)點標識符的對象 (例如:在多用戶聊天室的一個參與者) 。當提供必要的信息來完成資

15、源綁定(第 7 節(jié))時,資源標識符對服務器與其它客戶端均不透明,并且由客戶端實現(xiàn)來 定義,以后,它作為一個“已連接資源”參考。實體可能同時維護多連接,每個已連接的資源均由資源標識符來進行區(qū)別。資源標識符必須按 Resourceprep profile of STRINGPREP 格式化,才能無錯應 用。比較兩個資源標識符前, 服務器必須 (客戶端應該) 首先為每個標識符應用 Resourceprep profile 。3.5 決定地址SASL 協(xié)商后(第 6 節(jié)),如果正確,資源綁定(第 7 節(jié)),流接收實體必須決定 初始實體的 JID 。如果SASL協(xié)商(第6節(jié))期間未指定授權(quán)身份,對服務器

16、與服務器間的通信,初 始實體的 JID 應當被授權(quán)身份,派生于認證身份,在 SASL( Simple Authentication and Security Layer 簡單授權(quán)與安全層)說明 SASL 中定義。如果SASL協(xié)商(第 6節(jié))期間未指定授權(quán)身份, 對客戶端到服務器的通信, “bare JID”( <url=mailto:nodedomainnodedomain/url>)應該被授權(quán)身份, 被派生于授權(quán)認證, 定義在SASL。在資源綁定期間(第 7節(jié))“ full JID ”(<url=mailto:nodedomain/resourcenodedomain/re

17、source/url& gt;)的資源標識符部分應當是客戶端與服務器間協(xié)商的資源標識符。接收實體必須確保結(jié)果 J I D (包括結(jié)點標識符,域標識符,資源標識符,分隔符) 遵從此節(jié)中前面所定義的規(guī)則與格式; 為滿足此限制, 接收實體可能需要替代由接收實體所 決定的規(guī)范的 JID 初始實體所發(fā)送的 JID。XMPP 3920 最靠譜的中文翻譯文檔(二)XML 流4.1 概述使 presence-aware 實體間能夠相互迅速的、 異步交換相關(guān)的小負載的結(jié)構(gòu)化信息有兩種基本元素: XML 流與 XML 節(jié)。術(shù)語定義如下:XML流定義:XML流是一個容器,用于網(wǎng)絡(luò)上任意兩實體間交換XML元素

18、。XML流的開始是以一個起始的 XML<stream>標記(有合 適的屬性與命名空間聲明)表示, XML流的 結(jié)尾以一個結(jié)束的 XML</stream>標記表示。在流的生命周期中,初始化它的實體能夠通過 流 發(fā)送極多的 XML 元素,元素與 XML 節(jié)(定義在此, <message/>, <presence/>, 或 <iq/> 元素由缺省命名空間驗證)都用于協(xié)商流(例:協(xié)商使用TLS(第5節(jié))或使用SASL(第6節(jié))。 “初始流 ”是從初始實體(通常 是一個客戶端或服務器)到接收實體(通常是一個服 務器) 的協(xié)商, 并被看作與從初始

19、實體到接收實體的會話一致。 初始流能從初始實體到接收 實體單向通信;為了 能夠從接收實體到初始實體的信息交換,接收實體必須在反方向協(xié)商 一個流( “響應流 ”)。XML節(jié)定義:XML節(jié)是一個不連續(xù)的結(jié)構(gòu)化信息語義單元,通過XML流從一個實體發(fā)送到另一個實體。 XML節(jié)以根</stream>的直接子層存在,如果它匹配產(chǎn)品 43內(nèi)容XML, 則可以很好的平衡。任何XML節(jié)的開始都由深度為 1的XML流(例如:<presence>)的開始標記元素來清 楚的表示, XML 節(jié)的結(jié)尾由相應的深度為 1 的關(guān) 閉標記來清楚的表示。 為傳送想要的信息, 一個XML節(jié)可能包含必要的子元

20、素(帶有屬性,元素,XML字符數(shù)據(jù))。在此定義的僅有的XML節(jié) 是<message/>, <presence/>,<iq/>元素,由流的缺省命名空間驗證,在XML節(jié)(第9節(jié)) 中描述;為傳輸層安全(TLS Tran sport Layer Security)協(xié)商,SASL協(xié)、商,或服務器 回叫(第8節(jié))而發(fā)送的XML元素,并不會當作 XML節(jié)來考慮。考慮一個客戶端與服務器的會話例子。 為了連接到服務器, 客戶端必須初始化一個 XML 流:發(fā)送一個起始的<stream>標記給服務,可選先于一個指定XML版本的文本聲明與字符編碼支持(參考文本聲明的內(nèi)

21、容(11.4);也可參考字符編碼( 11.5)。服從本地策略與所提供的服務,服務器接下來應該回復另一個 XML流給客戶端,再次可選先于一個文本聲明。一但客戶端完成了 SASL協(xié)商(第6節(jié)),客戶端可以通過流發(fā)送極多的XML節(jié)給網(wǎng)絡(luò)上 的任意容器。當客戶端想關(guān)閉流時,它簡單發(fā)送一個關(guān)閉 </stream> 標記給服務器(也可以由 服務器來關(guān)閉流),從這以后,客戶端與服務器 都應終止?jié)撛诘倪B接(通常是一個TCP連接)。習慣于將 XML 考慮成以文檔為中心的人可能希望看到客戶端與服務器的會話作為兩個 末端開口的(自由回答的) XML 文檔的組成部分:一個從客戶端到服務器, 另一個從服務

22、器到客戶端。從這個觀點看,根 <stream/> 元素可被認為是每個 “文檔 ”的文檔實體,兩個 “文 檔”都由通過兩個XML流發(fā)送 的XML節(jié)的集聚來建立。然而,這種觀點僅是一種方便;XMPP 并不以文檔處理,而是以 XML 流或 XML 節(jié)來處理。本質(zhì)上,那么,一個XML流充當了所有通過會話發(fā)送的XML節(jié)的信封。可用圖簡單表示如下:| <stream> | <presence>| <show/>| </presence>| <message to='foo'> | <body/> | | &

23、lt;/message> | <iq to='bar'> | <query/> | </iq> | . | </stream> |4.2 綁定到 TCP雖然將一個XML流結(jié)合到一個TCP連接上不是必須的(例如:兩個實體能通過其它諸如HTTP投票選舉機制而彼此互連),此說明也只定義了 XMPP到TCP的綁定。在客戶端到 服務器端通信的上下文中, 服務器必須允許客戶端為了從客戶端到服務器與服務器到客戶端 的XML節(jié)發(fā)送共享的一個單 TCP連接。在服務器到服務器的通信上下文中,服務器必須使 用一條TCP連接用于從服務器到其對等服務

24、器的XML節(jié)傳送,另一條TCP連接(由對等初始 化)用于對其等服務器到服務器的XML節(jié)傳送,總共有兩條 TCP連接。4.3 流安全當在XMPP1.0中協(xié)商XML流時,TLS應當按TLS應用(第5節(jié))所定義的來使用,SASL 必須按SASL (第 6節(jié))所定義的來使用。初始流”(例如:從初始實體到接收實體的流)與“響應流” (例如:從接收實體到初始實體的流)必須被分別保護,即使雙向安全可能已通 過相互的認證機制所建立。 實體不應當在流被認證之前,嘗試通過流發(fā)送 XML節(jié)(第9節(jié)), 但如果這樣做了,那么,其它實體不準接受此類節(jié),并應當返回一個 <non- authorized/> 流

25、錯 誤,然后終止兩端的 XML流與潛在的TCP連接;注意,這只適用于XML節(jié)(例如:<message />, <presence/>, <iq/> 元素,由缺省命名空間檢查) 并不適用于流協(xié)商(例如:用于協(xié)商使用 TLS(第5節(jié))或使用 SASL (第 6節(jié))的XML元素。4.4 流屬性流元素屬性如下:1) to 屬性應當僅用于從初始實體到接收實體的 XML流頭中,并且必須被設(shè)成一 個接收實體服務的主機名。 t屬性不應當設(shè)在接收實體回應初始實體的 XML流頭中;然而, 如果 t屬性包括在內(nèi),它應當被初始實體默默忽略。2) from frodl性應當僅用于從接

26、收實體到初始實體的 XML流頭中,并且必須被設(shè) 成一個接收實體服務的主機名,此接收實體正授權(quán)訪問初始實體。 from屬性不應在初始實 體發(fā)送到接收實體的流頭中;然而,如果 from屬性包括在內(nèi),它應當被接收實體忽略。3) id屬性應當僅用于從接收實體到初始實體的XML流頭中。此屬性是唯一一個由接收實體創(chuàng)建的,作為初始實體流與接收實體間會話的密鑰,并且,在接收應用(通常是一個服務器)中是唯一的。注意:流ID可能是嚴格安全的,并且因此必須是即不能預測也不能重復的(參考RANDOM推薦關(guān)于隨機安全觀點)。 i屬性不應在初始實體到接收實 體的XML流頭中;然而,如果 idf性包含在內(nèi),應被接收實體忽略

27、。4)xml:lang xml:lan屬性'(定義在XML的12.2)應當包含在初始實體的初始流頭中,用于指定缺省語言,此語言可以是任何通過流發(fā)送的人類可讀的XML 字符數(shù)據(jù)。如果屬性包含在內(nèi),接收實體應當記住此值并做為初始流與響應流的缺省值; 如果此屬性不包含在內(nèi), 接收實體應當為兩個流使用一個可配置的缺 省值,它必須為響應流在頭中通信。對所有通 過初始化流發(fā)送的節(jié),如果初始實體不包含xml:lan屬性,接收實體應當應用缺省值;如果初始實體包含xml:lang屬性,接收實體不準修改或刪除它(參考xml:lang (9.1.5)。xml:lang屬性值必須是一個 NMTOKEN(定 義

28、在XML( 2.3),并且必須與定義在 RFC3006LANGTAGS 中的格式一致。5)version 版本屬性出現(xiàn)設(shè)到至少是“1.0信號值,支持定義在說明書中的相關(guān)流協(xié)議(包括流特征) 。有關(guān)代與屬性處理的具體規(guī)則定義如下:可總結(jié)如下:| initiating to receiving | receiving to initiating+to | hostname of receiver | silently ignoredfrom | silently ignored | hostname of receiverid | silently ignored | session keyxml

29、:lang | default language | default languageversion | signals XMPP 1.0 support | signals XMPP 1.0 support4.4.1 版本支持XMPP版本在此指定為“1.Q”特別的,這封裝了流相關(guān)協(xié)議(TLS應用(5),SASL應用(6),流錯誤(4.7),還有三個已定義的 XML 節(jié) 類型(<message/>, vpresence/>, and <iq/>) 的語義。 XMPP 版本的編號方案是 “<major>.<minor> 。” Major 與

30、minor 數(shù)字必 須作為分離的 整數(shù)對待,并且每個數(shù)字可能并不按單數(shù)字增加。因此"XMPP 2.4"是一個比"XMPP 2.13"低的版本,依次低于"XMPP 12.3"。前導零(例如:"XMPP 6.01")必須被接收者忽略并不準發(fā)送。Major 版本號應當增加,只要流與節(jié)格式或是所需行為已很大程度上改變,以至于老版 本如果對它不理解的并采取在舊版說明中指定的動作時,只簡單忽略元素與屬性時無法與新版本實體互操作, 就要增加主版本號。 次版本號指新能力, 并且必須被有一個更小次版本 號的實體所忽略,但被有更大次版

31、本號的實體作信息目的用。舉例:次版本號可能指處理 消息,出席,或IQ節(jié)新近定義的 type!性值;有更大次版本號的實體將簡單注意它的通信 者不理解此type屬性 值,并因此而不發(fā)送它。以下規(guī)則由實現(xiàn)應用于產(chǎn)生與處理在流頭中的版本'屬性:1)初始實體必須在初始流頭中將版本屬性值設(shè)到它所支持的最高版本號(例如:如果 它所支持的最高版本號定義在此說明中,必須設(shè)值為 “1.0)”2) 接收實體必須在響應流頭中設(shè)置版本屬性值或者是初始實體提供的值,或者是接收 實體所支持的最高版本號,無論哪一個更低。 接收實體必須對主、 次版本號做數(shù)字比較,而 不是 "<major>.<

32、;minor>" 字符串匹配。3)如果包含在響應流頭中的版本號至少一個主版本號低于包含在初始流頭中的版本號, 并且新版本實體不能像上述那樣與舊版本互操作,初始實體應當產(chǎn)生一個<unsupported-version/>流錯誤,并終止 XML流與潛在的 TCP連接。4)如果每個實體都收到一個帶有 “無版本號 ”屬性的流頭,實體必須考慮由其它實體支 持版本將是“ 0.0并不應當在發(fā)送響應流時包括version!性。4.5 命名空間聲明流元素必須擁有流命名空間聲明和一個缺省的命名空間聲明 (命名空間聲明定義在 XML 命名空間說明文檔XML-NAMES中)。對有關(guān)流命名空

33、間與缺省命名空間的更細節(jié)的信息, 看命名空間名稱與前綴( 11.2)。4.6 流特征如果初始化實體包含版本屬性, 并在初始流頭中, 其值至少設(shè)為 “ 1.0, ”那么接收實體必 須發(fā)送一個 <features/> 子元素(由流命名空 間前綴作前綴)給初始實體,以宣布任何可被 協(xié)商的(或另外需要被廣告的能力)流級別的特征。當前,這僅用于廣告在此定義的TLS應用(5), SASL應用(6)和資源綁定(7),并且,會話按照XMPP-IM中所定義的來建立; 然而,流特征的功能性可被用于廣告其它將來可協(xié)商的特征。如果實體不理解或不支持某些特征,那么它應當默默的忽略。如果一個或多個安全特征(例

34、如:TLS與 SASL需要在非安全特征(例如:資源綁定)被提供之前成功被協(xié)商,非安全相關(guān)特征不應當在相關(guān)安全特征被協(xié)商之前包含在流特征中被廣告。4.7 流錯誤根流元素可能包含一個 <error/> 子元素,此元素由流命名空間前綴來加前綴。如果錯誤子元素感覺到一個流級別錯誤發(fā)生, 它必須由一個兼容實體 (通常是一個服務器而不是一個 客戶端)來發(fā)送。4.7.1 規(guī)則以下規(guī)則應用于流級別錯誤:1)設(shè)想所有流級別錯誤均是不可恢復的;因此,如果一個錯誤在流級別層發(fā)生,那么 檢測錯誤的實體必須發(fā)送一個流錯誤給其它實體,發(fā)送一個關(guān)閉 </stream> 標記,并終止?jié)?在的TCP連接

35、。2)如果在流被建立期間發(fā)生錯誤,接收實體必須一直發(fā)送起始<stream>標記,將<error/>元素作為流元素的子元素,發(fā)送 關(guān)閉</stream>標記,并終止?jié)撛诘腡CP連接。此種情況下,如果初始實體在 t屬性(或根本沒提供 t屬性)中提供了一個未知主機,服務器應當在流頭的 fromi性中提供服務器的授權(quán)主機名,并在終止前發(fā)送。4.7.2 語法流錯誤語法如下:<stream:error><defined-condition xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>&

36、lt;text xmlns='urn:ietf:params:xml:ns:xmpp-streams'xml:lang='langcode'>OPTIONAL descriptive text</text>OPTIONAL application-specific condition element</stream:error><error/> 元素:1)必須包含一個子元素,此子元素與以下定義的已定義的節(jié)錯誤條件之一相一致;此 元素必須被 'urn:ietf:params:xml:ns:xmpp-streams&

37、#39; 命名空間認為是合格的。2)可能包含一個<text/>子元素,此子元素包含了更詳細描述錯誤的XML字符數(shù)據(jù);此元素必須被 'urn:ietf:params:xml:ns:xmpp-streams' 命名空間認為是合格的,并且,應當擁 有一個'xml:lang'屬性來指明 XML字符數(shù)據(jù)的自然語言。3) 可能包含一個用于說明特殊應用錯誤條件的子元素;此元素必須由一個已定義應用命名空間來認證,并且,它的結(jié)構(gòu)由那個命名空間來定義。<text/> 元素是可選的。如果包含了此元素,它應當僅用于提供描述性或診斷性的信息, 來補充一個已定義的條

38、件或特殊應用條件的意思;它不 應當由一個應用以程序化的形式敘 述。它不應當作為錯誤消息展示給一個用戶,但可能另外顯示與包含條件元素(或元素們) 相關(guān)的錯誤消息。4.7.3 已定義條件以下定義了流級別錯誤條件:1)<bad-format/>- 已經(jīng)發(fā)送 XML 的實體不能被處理; 此錯誤可能用于代替更特殊的 XML 相關(guān)錯誤,例如: <bad-namespace-prefix/>, <invalid-xml/>,<restricted-xml/>, <unsupported-encoding/>, <xml-not-well-fo

39、rmed/> ,雖然更特殊的錯誤是首 選。2) <bad-namespace-prefix/>- 實體已經(jīng)發(fā)送了一個不被支持的名空間前綴,或在一個需 要那樣一個前綴的元素中發(fā)送了沒有命名空間的前綴 (參考 XML 命名空間名與前綴 (11.2)。3) <conflict/>- 服務器正為實體關(guān)閉活動流,因為一個已經(jīng)被初始化的新流與現(xiàn)存流沖 突。4) <connection-timeout/>- 一段時間內(nèi)(可根據(jù)本地服務策略配置)實體并不通過流產(chǎn) 生任何通信。5) <host-gone/>-由初始實體在流頭中提供的 t屬性值對應于一個主機名

40、,而此主機名 已不再被一個服務器當作主機了。6) <host-unknown/>-由初始實體在流頭中提供的 t屬性值于服務器所擁有的主機名不 一致。7) vimproper-addressing/>- 個在兩個服務器間發(fā)送的節(jié),缺少 t或 fron屬性(或此 屬性無值)8) <internal-server-error/>- 服務器經(jīng)歷了錯誤配置或其它未定義內(nèi)部錯誤使其無法提供 服務。9) <invalid-from/>-在 fron地址中提供的JID或主機名與已授權(quán)的JID或有效域協(xié)商不匹配,此有效域協(xié)商為通過 SASL或回叫服務器間的協(xié)商,或通過授

41、權(quán)與資源綁定的客戶端 與服務器間的協(xié)商。10) <invalid-id/>-流ID或回叫ID是無效的或與以前提供的ID不匹配。11) <invalid-namespace/-流命名空間名不只是/streams ,或回叫 命名空間名不只是"jabber:server:dialback"(參考XML命名空間名與前綴(11.2)12) <invalid-xml/>-實體通過流向執(zhí)行驗證的服務器發(fā)送了無效的XML(參考驗證(11.3)。13) <not-authorized/>-實體試圖在流被認

42、證前發(fā)送數(shù)據(jù),或不授權(quán)執(zhí)行一個相關(guān)流協(xié)商 的活動;接收實體在發(fā)送流錯誤前不準處理違規(guī)節(jié)。14) vpolicy-violation/>-實體違反了某些本地策略;服務器可能選擇在<text/>元素或特殊 -應用條件元素中指定策略。15) <remote-connection-failed/>服務器不能適當?shù)倪B接到遠程實體,需要認證或授權(quán)。16) <resource-constraint/>服務器缺少提供服務給流的必要的系統(tǒng)資源。17) <restricted-xml/>實體試圖發(fā)送受限的XML特征,例如評注、處理介紹,DTD,實體參考,或保留

43、字符(參考(11.1)。18) <see-other-host/>服務器將不提供服務給初始實體,但正重定向傳輸給另一個主機;服務器應當指定替換的主機名或IP地址(必須是有效域標識符),作為<see-other-host/>元素的XML字符數(shù)據(jù)。19) <system-shutdown/>服務器被關(guān)閉,并且所有的活動流被關(guān)閉。20) <un defi ned-co nditio n/> 錯誤條件是由此列表中的其它已定義條件中的一個;此錯誤 條件應當僅用在與特殊-應用條件相結(jié)合。21) <unsupported-encoding/>初始實

44、體已在不被服務器支持的編碼中為流編碼(11.5 )22) <unsupported-stanza-type/>初始實體已發(fā)送了一個不被服務器支持的第一級子流。23) <unsupported-version/>由初始實體在流頭提供的版本屬性值指定了一個不被服務器 支持的XMPP版本;服務器可能在<text/>元素中指定它支持的版本。24) <xml-not-well-formed/>初始實體已經(jīng)發(fā)送了不標準的XML,標準的XML由XML定 義。4.7.4特殊應用條件注意,一個應用可能通過在錯誤元素中包含一個合適的命名空間子元素來提供特殊應用流錯誤

45、信息。特殊應用元素應當補充或進一步驗證一個已定義元素。因此,<error/>元素將包含兩到三個子元素:<stream:error><xml-not-well-formedxmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-streams'>Some special application diagnostic information!</text&

46、gt;<escape-your-data xmlns='application-ns'/></stream:error></stream:stream>XMPP 3920 最靠譜的中文翻譯文檔(三)4.8 簡化的流例子而“ S”此部分包含兩個簡化的客戶端與服務器(“ C'行是從客戶端發(fā)送到服務器,行是由服務器發(fā)送到客戶端)間基于流會話的例子;這些例子解釋進一步的概念。A basic "session":C: <?xml version='1.0'?><stream:streamto

47、=''xmlns='jabber:client' xmlns:stream='/streams' version='1.0'>S: <?xml version='1.0'?><stream:streamfrom=''id='someid'xmlns='jabber:client'xmlns:stream='/streams'versio

48、n='1.0'>.en crypti on, authe nticati on, and resource binding .C: <message from=' juliet 'to='romeo'xml:la ng='e n'>C: <body>Art thou not Romeo, and a Mon tague?</body>C: </message>S: <message from=' romeoexample .n et'to='jul

49、iet 'xml:la ng='e n'>S: <body>Neither, fair sain t, if either thee dislike.</body>S: </message>C: </stream:stream>S: </stream:stream>A "sessi on" gone bad:C: <?xml versio n='1.0'?><stream:streamto=''xmln s='jabber:cl

50、ie nt'xml ns:stream='/streams'versio n='1.0'>S: <?xml versio n='1.0'?><stream:streamfrom=''id='someid'xmln s='jabber:clie nt'xml ns:stream='/streams'version='1.0'>. encryp

51、tion, authentication, and resource binding .C: <message xml:lang='en'><body>Bad XML, no closing body tag!</message>S: <stream:error> <xml-not-well-formed xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error>S: </stream:stream>5 使用 TLS5

52、.1 概述XMPP 包含一個方法,用于保護流不被篡改和偷聽。此信道加密方法利用傳輸層安全(TLS)協(xié)議TLS,連同“ STARTTL”擴展,在為描述在RFC 2595USINGTLS中的IMAPIMAP, POP3POP3, ACAPACAP等相似協(xié)議擴展模型。用于STARTTLSr展的命 名空間名是 'urn:ietf:params:xml:ns:xmpp-tls'。一個給定域的管理者可能需要使用TLS來進行客戶端到服務器的通信,服務器到服務器的通信,或二者兼有。客戶端應使用TLS去保護流,在企圖完成SASL協(xié)商之前,而且, 服務器出于保護服務器到服務器的通信的考慮,應在兩個

53、域間使用TLS。應用以下規(guī)則:1 ) 遵從此說明的初始實體必須包含版本屬性, 并在初始流頭中將其值設(shè)為“ 1.0”。2 )如果兩服務器間的 TLS協(xié)商發(fā)生,直到服務器宣稱的域名系統(tǒng)(DNS主機名被 決定(參考服務器到服務器的通信( 14.4 )后,才能處理通信。3 )當與此說明一致的接收實體收到一個包含版本屬性設(shè)為至少“ 1.0 ”的初始化流命名空間認證) 并帶有它所支持的其它 流特征的列表。時,發(fā)送一個流頭作響應(包含版本標記)后,必須包含一個<starttls/> 元素(由'urn:ietf:params:xml:ns:xmpp-tls' 服務器以 <st

54、arttls/> 響應 4 )如果初始實體選擇使用 TLS, TLS協(xié)商必須在SASL協(xié)商處理之前完成;這種協(xié) 商順序是必要的,用于幫助保護SASL協(xié)商期間發(fā)送認證信息,并在TLS協(xié)商之前這段時間, 使基于使用認證的 SASL EXTERNA機制成為可能。5 )在TLS協(xié)商期間,實體不準在根流元素中發(fā)送任何空白字符(匹配 XML內(nèi)容,產(chǎn)品3)作為元素間(任何在TLS例子中的空白字符都只是為了便于閱讀)的分隔符;這種限制有助于確保合適的安全層字節(jié)精度。6 )接收實體必須考慮 TLS協(xié)商在發(fā)送<proceed/>元素的關(guān)閉“ >”字符之后立即開始。初始實體必須考慮 TLS協(xié)

55、商在收到來自于接收實體的<proceed/>元素的關(guān)閉“ >”字符之后立即開始。7 ) 初始實體必須驗證由接收實體表示的證書;參考證書驗證( 14.2 )相關(guān)證書驗 證步驟。8 ) 證書必須根據(jù)初始實體(例如:一個用戶)提供的主機名來檢查,而不是通過 域名系統(tǒng)解析的主機名; 例如:如果用戶指定一個 "" 的主機 名,而 DNSSRVSRV 查找并返回 "" ,證書必須作為 "" 被檢查。如果對任何此種 XMPP實體(例如,客戶 端或服務器) 的一個 JID 在一個證書中被表示, 它必須作為一個 UTF8String來

56、表示, UTF8String 在位于 subjiectAltName 中 的一個 otherName 實體中,使用 ASN.1對象標識符 "id-on-xmppAddr" ,在本文檔 5.1.1 中說明。9 )如果TLS協(xié)商成功,接收實體必須拋棄TLS生效之前,來自初始實體的任何非安全格式的知識。10 )如果TLS協(xié)商成功,初始實體必須拋棄 TLS生效之前,來自接收實體的任何非 安全格式知識。11 )如果tls協(xié)商成功,接收實體不準提供starttlST展給當流重新開如時被提供的帶有其他流特征的初始實體。12 )如果TLS協(xié)商成功,初始實體必須繼續(xù)SASL協(xié)商。13 )如果

57、TLS協(xié)商結(jié)果失敗,接收實體必須終止XML流與潛在的TCP連接。14 ) 參考強制實施技術(shù)( 14.7 )相關(guān)的必須被支持的機制。5.1.1 ASN.1用于XMPP地址的對象標識符上述ASN.1對象標識符"id-on-xmppAddr" 定義如下:id-pkix OBJECT IDENTIFIER := iso(1) identified-organization(3)dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-on OBJECT IDENTIFIER := id-pkix 8 - other name f

58、ormsid-on-xmppAddr OBJECT IDENTIFIER := id-on 5 XmppAddr := UTF8String對象標識符可能也以點分制顯示,格式為 "..5"5 2 敘述當初始實體使用 TLS 保護一個帶有接收實體的流時,步驟如下:1 )初始實體打開一個TCP連接,靠發(fā)送開放XML流頭給接收實體,此流頭包含版 本屬性,并設(shè)其值至少為“ 1.0”,來初始化流。2 )接收實體以打開一個 TCP連接并發(fā)送一個XML流頭給初始實體作為響應,此流 頭包含值至少為“ 1.0 ”版本屬性。3 ) 接收實體靠包含帶有其它支持流特征(

59、如果TLS 需要與接收實體交互,它應當靠包含一個 <required/> 元素作為 <starttls/> 的子元素來標記此事實) 的列表來為初始實體 提供STARTTLS擴展。4 )初始實體發(fā)起 STARTTLS命令(例:由urn:ietf:params:xml:ns:xmpp-tls'命名空間確認的<starttls/> 元素)去指導希望開始 TLS協(xié)商去保護流的接收實體。5 ) 接收實體必須以由命名空間 'urn:ietf:params:xml:ns:xmpp-tls'認證了的<proceed/>元素 或<fa

60、ilure/> 元素響應。如果有失敗情況發(fā)生,接收實體必須終止雙方的 XML流與潛在的TCP連接。如果接著向下進行,實體必須嘗試通過TCP連接完成TLS協(xié)商, 并不準發(fā)送任何進一步的XML數(shù)據(jù),直到TLS協(xié)商完成。6 )初始實體與接收實體嘗試依據(jù)TLS完成TLS協(xié)商。7 )如果TLS協(xié)商不成功,接收實體必須終止TCP連接。如果TLS協(xié)商成功,初始實體必須靠發(fā)送一個開始XML流頭給接收實體(它并不需要先發(fā)送一個關(guān)閉</stream>標記,因為接收實體與初始實體必須考慮到原始流根據(jù)成功的TLS協(xié)商而被關(guān)閉),以初始一個新XML流頭給有可利流。8 ) 根據(jù)從初始實體接收的新流頭,接收實體必須靠發(fā)送一個新用特征(不包括STARTTLS寺征)的初始實體來響應。53 客戶端到服務器的例子下面例子顯示了一個客戶端保護使用STARTTL(S 注:替換步驟顯示在下一行,用來解釋協(xié)議失敗的情況; 他們在本例中并不詳盡也不是必須的由數(shù)據(jù)發(fā)送而觸發(fā)) 流的數(shù)據(jù)流。1 步:客戶端初始流給服務器:<stream:streamxmlns='jabber:client'xmlns:stream='/streams'

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論