国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

XMPP-TLS和SASL握手

2019-11-14 19:52:07
字體:
來源:轉載
供稿:網友

TLS


概覽

  XMPP包含的一個保證流安全的方法(傳輸層安全協議[TLS]的頻道加密方法)來防止篡改和偷聽.

  一個給定域的管理員可以要求客戶端和服務器通信以及服務器之間通信時使用TLS,或者兩者都要求。客戶端應該在嘗試完成 SASL握手之前使用 TLS,服務器應該在兩個域之間使用 TLS 以保證服務器間通信的安全。

使用規則:
  1. 一個遵守本協議的初始化實體必須在初始化流的頭信息中包含一個'version'屬性并把值設為“1.0”。
  2. 如果TLS握手發生在兩個服務器之間,除非服務器聲稱的DNS主機名已經被解析,通信不能繼續進行。
  3. 當一個遵守本協議的接收實體接收了一個初始化流(它的頭信息中包含一個'version'屬性并且值設為“1.0”),在發送應答流的的頭信息(其中包含版本標記)之后,它必須發送<starttls/>元素(名字空間為 'urn:ietf:params:xml:ns:xmpp-tls')以及其他它支持的流特性 。
  4. 如果初始化實體選擇使用TLS,TLS握手必須在SASL握手之前完成;這個順序用于幫助保護SASL握手時發送的認證信息的安全,同時可以在必要的時候在TLS握手之前為SASL外部機制提供證書。
  5. TLS握手期間,一個實體不能在流的根元素中發送任何空格符號作為元素的分隔符(在下面的TLS示例中的任何空格符都僅僅是為了便于閱讀);這個禁令用來幫助確保安全層字節精度。
  6. 接收實體必須(MUST)在發送<PRoceed/> 元素的關閉符號">" 之后立刻開始TLS協商。初始化實體必須(MUST)在從接收實體接收到<proceed/> 元素的關閉符號">" 之后立刻開始TLS協商。
  7. 初始化實體必須驗證接收實體出示的證書.
  8. 證書必須檢查初始化實體(比如一個用戶)提供的主機名;而不是通過DNS系統解析出來的主機名;例如,如果用戶指定一個主機名"example.com"而一個DNS SRV [SRV]查詢返回"im.example.com",證書必須檢查"example.com".如果任何種類的XMPP實體(例如客戶端或服務器)的JID出現在一個證書里,它必須表現為一個別名實體里面的UTF8字符串,存在于subjectAltName之中。如何使用 [ASN.1] 對象標識符 "id-on-xmppAddr" 定義在本文的第五章第一節第一小節。
  9. 如果 TLS 握手成功了,接收實體必須丟棄TLS 生效之前從初始化實體得到的任何不可靠的信息.
  10. 如果 TLS 握手成功了,初始化實體必須丟棄TLS 生效之前從接收實體得到的任何不可靠的信息. 
  11. 如果 TLS 握手成功了,接收實體不能在流重新開始的時候通過提供其他的流特性來向初始化實體提供 STARTTLS 擴展.
  12. 如果 TLS 握手成功了,初始化實體必須繼續進行SASL握手。
  13. 如果 TLS 握手失敗了,接收實體必須終止XML流和相應的TCP連接。

簡要描述

  當一個初始化實體用TLS保護一個和接收實體之間的流,其步驟如下:

  1. 初始化實體打開一個TCP連接,發送一個打開的XML流頭信息(其'version'屬性設置為"1.0")給接收實體以初始化一個流。
  2. 接收實體打開一個TCP連接,發送一個XML流頭信息(其'version'屬性設置為"1.0")給初始化實體作為應答。
  3. 接收實體向初始化實體提議STARTTLS范圍(包括其他支持的流特性),如果TLS對于和接收實體交互是必需的,它應該(SHOULD)在<starttls/>元素中包含子元素<required/>.
  4. 初始化實體發出STARTTLS命令(例如, 一個符合'urn:ietf:params:xml:ns:xmpp-tls'名字空間的 <starttls/> 元素) 以通知接收實體它希望開始一個TLS握手來保護流。
  5. 接收實體必須(MUST)以'urn:ietf:params:xml:ns:xmpp-tls'名字空間中的<proceed/>元素或<failure/>元素應答。如果失敗,接收實體必須(MUST)終止XML流和相應的TCP連接。如果繼續進行,接收實體必須(MUST)嘗試通過TCP連接完成TLS握手并且在TLS握手完成之前不能(MUST NOT)發送任何其他XML數據。
  6. 初始化實體和接收實體嘗試完成TLS握手。(要符合[TLS]規范)
  7. 如果 TLS 握手不成功, 接收實體必須(MUST)終止 TCP 連接. 如果 TLS 握手成功, 初始化實體必須(MUST)發送給接收實體一個打開的XML流頭信息來初始化一個新的流(先發送一個關閉標簽</stream>是不必要的,因為接收實體和初始化實體必須(MUST)確保原來的流在TLS握手成功之后被關閉) 。
  8. 在從初始化實體收到新的流頭信息之后,接收實體必須(MUST)發送一個新的XML流頭信息給初始化實體作為應答,其中應包含可用的特性但不包含STATRTTLS特性。

具體步驟(客戶端-服務器)

  步驟1:客戶端初始化流給服務器

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

   步驟2:服務器發送一個流標簽給客戶端作為應答

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_123' from='example.com' version='1.0'>

  步驟3:服務器發送 STARTTLS 范圍給客戶端(包括驗證機制和任何其他流特性)

<stream:features>     <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>       <required/>     </starttls>     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>       <mechanism>DIGEST-md5</mechanism>       <mechanism>PLAIN</mechanism>     </mechanisms></stream:features>

   步驟4:客戶端發送 STARTTLS 命令給服務器

<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

  步驟5:服務器通知客戶端可以繼續進行

<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

  步驟 5 (或者): 服務器通知客戶端 TLS 握手失敗并關閉流和TCP連接

<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/></stream:stream>

  步驟 6: 客戶端和服務器嘗試通過已有的TCP連接完成 TLS 握手.

  步驟 7: 如果 TLS 握手成功, 客戶端初始化一個新的流給服務器

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='c2s_234' version='1.0'>   <stream:features>     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>       <mechanism>DIGEST-MD5</mechanism>       <mechanism>PLAIN</mechanism>       <mechanism>EXTERNAL</mechanism>     </mechanisms></stream:features>

  步驟 9: 客戶端繼續 SASL 握手

具體步驟(服務器-服務器)

  步驟1:Server1 初始化流給 Server2

<stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

  步驟2:Server2 發送一個流標簽給 Server1 作為應答

<stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='s2s_123' version='1.0'>

  步驟3:Server2 發送 STARTTLS 范圍給 Server1 ,包括驗證機制和任何其他流特性

<stream:features>     <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>       <required/>     </starttls>     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>       <mechanism>DIGEST-MD5</mechanism>       <mechanism>KERBEROS_V4</mechanism>     </mechanisms></stream:features>

  步驟 4: Server1 發送 STARTTLS 命令給 Server2

<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

  步驟5:Server2 通知 Server1 允許繼續進行

<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

  步驟 6: Server1 和 Server2 嘗試通過 TCP 完成 TLS 握手.

  步驟 7: 如果 TLS 握手成功, Server1 初始化一個新的流給 Server2

<stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

  步驟7(或者): 如果 TLS 握手不成功, Server2 關閉 TCP 連接.

  步驟8 : Server2 發送一個包含任何可用流特性的流頭信息給 Server1 

<stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='s2s_234' version='1.0'>   <stream:features>     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>       <mechanism>DIGEST-MD5</mechanism>       <mechanism>KERBEROS_V4</mechanism>       <mechanism>EXTERNAL</mechanism>     </mechanisms></stream:features>

  步驟9:Server1 繼續進行 SASL 握手

SASL


概覽

  XMPP 有一個驗證流的方法,即XMPP特定的SASL(簡單驗證和安全層)[SASL]。SASL提供了一個通用的方法為基于連接的協議增加驗證支持,而XMPP使用了一個普通的XML名字空間來滿足SASL的需要。

以下規則應用于:
  1. 如果SASL協商發生在兩臺服務器之間,除非服務器宣稱的DNS主機名得到解析,否則不能進行通信。
  2. 如果初始化實體有能力使用 SASL 協商, 它必須在初始化流的頭信息中包含一個值為"1.0"的屬性'version'。
  3. 如果接收實體有能力使用 SASL 協商, 它必須在應答從初始化實體收到的打開流標簽時(如果打開的流標簽包含一個值為"1.0"的'version'屬性),通過'urn:ietf:params:xml:ns:xmpp-sasl'名字空間中的<mechanisms/>元素聲明一個或多個驗證機制.
  4. 當 SASL 協商時, 一個實體不能在流的根元素中發送任何空格符號(匹配 production [3] content of [XML])作為元素之間的分隔符(在以下的SASL例子中任何空格符號的出現僅僅是為了增加可讀性); 這條禁令幫助確保安全層字節的精確度。
  5. 當SASL握手時,在XML元素中使用的任何 XML 字符數據必須被編碼成 base64, 編碼遵循 RFC 3548 第三章的規定。
  6. 如果一個 簡單名字"simple username" 規范被選定的SASL機制所支持,(比如, 這被 DIGEST-MD5 和 CRAM-MD5 機制支持但不被 EXTERNAL 和 GSSAPI 機制支持), 驗證的時候初始化實體應該在服務器間通信時提供 簡單名字 自身的發送域(ip地址或包含在一個域標識符中的域名全稱),在客戶端與服務器之間通信時提供注冊用戶名(包含在一個XMPP節點標識符中的用戶或節點名)。
  7. 如果初始化實體希望以另一個實體的身份出現并且SASL機制支持授權ID的傳輸,初始化實體在SASL握手時必須提供一個授權ID。如果初始化實體不希望以另一個實體的身份出現,初始化實體在SASL握手時不能提供一個授權ID。在 [SASL] 的定義中,除非授權ID不同于從驗證ID(詳見[SASL])中得到的缺省的授權ID,初始化實體不能提供授權ID。如果提供了,這個授權ID的值必須是<domain>的格式(對于服務器來說)或<node@domain>的格式(對于客戶端來說). 
  8. 在成功進行包括安全層的SASL握手之后,接收實體必須丟棄任何從初始化實體得到的而不是從SASL協商本身獲得的信息。
  9. 在成功進行包括安全層的SASL握手之后,初始化實體必須丟棄任何從接收實體得到的而不是從SASL協商本身獲得的信息。

簡要描述

  一個初始化實體使用SASL和接收實體做驗證的步驟如下:

  1. 初始化實體請求SASL驗證,它發送一個打開的XML流頭信息給接收實體,其'version'屬性的值為"1.0".
  2. 在發送一個XML流頭回復之后,接收實體聲明一個可用的SASL驗證機制清單;每個機制作為一個<mechanism/>元素,作為子元素包含在<mechanisms/>容器元素(其名字空間為'urn:ietf:params:xml:ns:xmpp-sasl')中,而<mechanisms/>則包含在流名字空間中的<features/>元素中。如果在使用任何驗證機制之前需要使用TLS,接收實體不能在TLS握手之前提供可用的SASL驗證機制清單。如果初始化實體在優先的TLS協商過程中呈現了一個合法的證書,接收實體應該在SASL握手中提出一個SASL外部機制給初始化實體,盡管這個外部機制可以在其它環境下提供。
  3. 初始化實體發送一個符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<auth/>元素(其中包含了適當的'mechanism'屬性值)給接收實體,以選擇一個機制。如果這個機制支持或需要,這個元素可以包含XML字符數據(在SASL術語中,即“初始化應答”);如果初始化實體需要發送一個零字節的初始化應答,它必須傳輸一個單獨的等號作為應答,這表示應答有效但不包含數據。
  4. 如果必要,接收實體向初始化實體發送一個符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<challenge/>元素來發出挑戰;這個元素可以包含XML字符數據(必須按照初始化實體選擇的SASL機制進行一致性運算)。
  5. 初始化實體向接收實體發送符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<response/>元素作為應答;這個元素可以包含XML字符數據(必須按照初始化實體選擇的SASL機制進行一致性運算)。
  6. 如果必要,接收實體發送更多的挑戰給初始化實體,初始化實體發送更多的回應。
這一系列的 挑戰/應答 組,持續進行直到發生以下三件事中的一件為止:
  1. 初始化實體向接收實體發送符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<abort/>元素以中止握手。在接收到<abort/>元素之后,接收實體應該允許一個可配置的但是合理的重試次數(至少2次),然后它必須終止TCP連接;這使得初始化實體(如一個最終用戶客戶端)能夠容忍可能不正確的credentials(如密碼輸入錯誤)而不用強制重新連接。
  2. 接收實體向初始化實體發送符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<failure/>元素以報告握手失敗(詳細的失敗原因應該在<failure/>的一個適當的子元素中溝通,在第六章第四節中的SASL Errors中定義)。如果失敗的情況發生了,接收實體應該允許一個可配置的但是合理的重試次數(至少2次), 然后它必須終止TCP連接;這使得初始化實體(如一個最終用戶客戶端)能夠容忍可能不正確的credentials(如密碼輸入錯誤)而不用強制重新連接。
  3. 接收實體向初始化實體發送符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<success/>元素以報告握手成功;如果所選擇的SASL機制要求,這個元素可以包含XML字符數據(見SASL術語,“成功的額外數據”)。接收到<success/> 元素之后,初始化實體必須(MUST)發送一個打開的XML流頭信息給接收實體以發起一個新的的流(不需要先發送一個 </stream>標簽,因為在發送和接收到<success/>元素之后,接收實體和初始化實體必須確認原來的流被關閉了)。從初始化實體接收到新的流頭信息之后,接收實體必須發送一個新的流頭信息給初始化實體作為回應,附上任何可用的特性(但不包括 STARTTLS 和 SASL 特性)或一個空的 <features/> 元素(這表示沒有更多的特性可用);任何沒有在本文定義的附加特性必須在XMPP的相關擴展中定義。

SASL 錯誤

SASL相關的錯誤條件定義如下:
  • <aborted/> -- 接收實體認可由初始化實體發送的<abort/>元素;在回應一個<abort/>元素時發送。
  • <incorrect-encoding/> -- 由初始化實體提供的數據無法處理,因為[BASE64]編碼不正確(例如,因為編碼不符合[BASE64]的第三章); 在回應一個包含初始化響應數據的<response/> 元素或<auth/>元素時發送.
  • <invalid-authzid/> -- 由初始化實體提供的授權id是非法的,因為它的格式不正確或初始化實體無權給那個ID授權;在回應一個包含初始化響應數據的<response/> 元素或<auth/>元素時發送。
  • <invalid-mechanism/> -- 初始化實體不能提供一個機制活、或請求一個不被接受實體支持的機制;在回應一個<auth/>元素時發送。
  • <mechanism-too-weak/> -- 初始化實體請求的機制比服務器策略對它的要求弱;在回應一個包含初始化響應數據的<response/> 元素或<auth/>元素時發送。
  • <not-authorized/> -- 驗證失敗,因為初始化實體沒有提供合法的credentials(這包括但不限于未知用戶名等情形);在回應一個包含初始化響應數據的<response/> 元素或<auth/>元素時發送。
  • <temporary-auth-failure/> -- 驗證失敗,因為接收實體出現了臨時的錯誤;在回應一個<response/> 元素或<auth/>元素時發送。

具體步驟(客戶端-服務器)

  步驟1:客戶端初始化流給服務器

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

  步驟2: 服務器向客戶端發送流標簽作為應答

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_234' from='example.com' version='1.0'>

  步驟3: 服務器通知客戶端可用的驗證機制

 <stream:features>     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>       <mechanism>DIGEST-MD5</mechanism>       <mechanism>PLAIN</mechanism>     </mechanisms></stream:features>

  步驟4:客戶端選擇一個驗證機制

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>

  步驟5:服務器發送一個 [BASE64] 編碼的挑戰給客戶端

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>  cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==</challenge>

  解碼后的挑戰信息是: 

  realm="somerealm",nonce="OA6MG9tEQGm2hh",/  qop="auth",charset=utf-8,algorithm=md5-sess

  步驟 5 (替代): 服務器返回一個錯誤給客戶端

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>     <incorrect-encoding/></failure></stream:stream>

  步驟 6: 客戶端發送一個[BASE64]編碼的回應這個挑戰:

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>   dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0i   T0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAw   MDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20i   LHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNo   YXJzZXQ9dXRmLTgK</response>

  解碼后的回應信息是

   username="somenode",realm="somerealm",/   nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",/   nc=00000001,qop=auth,digest-uri="xmpp/example.com",/   response=d388dad90d4bbd760a152321f2143af7,charset=utf-8

  步驟 7: 服務器發送另一個[BASE64]編碼的挑戰給客戶端

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>   cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=</challenge>

  解碼后的挑戰信息是:

rspauth=ea40f60335c427b5527b84dbabcdfffd

  步驟 7 (或者): 服務器返回一個錯誤給客戶端:

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>     <temporary-auth-failure/>   </failure></stream:stream>

  步驟 8: 客戶端應答這個挑戰

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

  步驟 9: 服務器通知客戶端驗證成功

<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

  步驟 9 (或者): 服務器通知客戶端驗證失敗

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>     <temporary-auth-failure/>   </failure></stream:stream>

  步驟 10: 客戶端發起一個新的流給服務器:

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

  步驟 11: 服務器發送一個流頭信息回應客戶端,并附上任何可用的特性(或空的features元素)

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_345' from='example.com' version='1.0'>   <stream:features>     <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>     <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/></stream:features>

具體步驟(服務器-服務器)

  步驟 1: 服務器1 發起一個流給 服務器2 

<stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

  步驟 2: 服務器2 回應一個流標簽給 服務器1

<stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='s2s_234' version='1.0'>

  步驟 3: 服務器2 通知 服務器1 可用的驗證機制

<stream:features>     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>       <mechanism>DIGEST-MD5</mechanism>       <mechanism>KERBEROS_V4</mechanism>     </mechanisms></stream:features>

  步驟 4: 服務器1 選擇一個驗證機制

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>

  步驟 5: 服務器2 發送一個[BASE64]編碼的挑戰給 服務器1

 <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>   cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9   ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz</challenge>

  解碼后的挑戰信息是

realm="somerealm",nonce="OA6MG9tEQGm2hh",/qop="auth",charset=utf-8,algorithm=md5-sess

  步驟 5 (替代): 服務器2 返回一個錯誤給 服務器1

 <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>     <incorrect-encoding/>   </failure></stream:stream>

  步驟 6: 服務器1 發送一個[BASE64]編碼的回應這個挑戰

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>   dXNlcm5hbWU9ImV4YW1wbGUub3JnIixyZWFsbT0ic29tZXJlYWxtIixub25j   ZT0iT0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5j   PTAwMDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5v   cmciLHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3   LGNoYXJzZXQ9dXRmLTgK</response>

  解碼后的應答信息是

   username="example.org",realm="somerealm",/   nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",/   nc=00000001,qop=auth,digest-uri="xmpp/example.org",/   response=d388dad90d4bbd760a152321f2143af7,charset=utf-8

  步驟 7: 服務器2 發送另外一個[BASE64]編碼的挑戰給 服務器1

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>   cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=</challenge>

  解碼后的挑戰信息是

rspauth=ea40f60335c427b5527b84dbabcdfffd

  步驟 7 (或者): 服務器2 返回一個錯誤給 服務器1

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>     <invalid-authzid/>   </failure></stream:stream>

  步驟 8: 服務器1 回應挑戰

 <response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

  步驟 8 (或者): 服務器1 中止協商

 <abort xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

  步驟 9: 服務器2 通知 服務器1 驗證成功

<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

  步驟 9 (或者): 服務器2 通知 服務器1 驗證失敗

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>     <aborted/>   </failure></stream:stream>

  步驟 10: 服務器1 重新發起一個新的流給 服務器2

<stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>

  步驟 11: 服務器2 發送一個流頭信息應答 服務器1 ,并附上任何可用的特性(或一個空的features元素).:

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='s2s_345' version='1.0'><stream:features/>

 

PS:資源文件來自Jabber /XMPP中文翻譯計劃
 
 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐县| 澳门| 榆树市| 蒙自县| 金塔县| 洮南市| 景宁| 外汇| 新兴县| 五常市| 达日县| 阿坝县| 安泽县| 得荣县| 巴彦淖尔市| 宝鸡市| 嫩江县| 奉化市| 繁昌县| 泰安市| 泗水县| 邵武市| 四会市| 来安县| 马公市| 盐池县| 金昌市| 阜康市| 蕲春县| 建昌县| 新营市| 恩施市| 英吉沙县| 祁东县| 山阴县| 克山县| 石楼县| 民权县| 南昌市| 南京市| 中阳县|