sasl

SASL全稱Simple Authentication and Security Layer,是一種用來擴充C/S模式驗證能力的機制。在Postfix可以利用SASL來判斷用戶是否有權使用轉發服務,或是辨認誰在使用你的伺服器。

SASL提供了一個通用的方法為基於連線的協定增加驗證支持,而XMPP使用了一個普通的XML名字空間來滿足SASL的需要

基本介紹

  • 中文名:sasl
  • 全稱::Simple Authentication and Security Layer
  • 定義::是一種用來擴充C/S模式驗證能力的機制
  • 規則::有情況需解析
簡介,SASL的使用,規則,敘述,SASL定義,SASL錯誤,

簡介

SASL全稱Simple Authentication and Security Layer,是一種用來擴充C/S模式驗證能力的機制。在Postfix可以利用SASL來判斷用戶是否有權使用轉發服務,或是辨認誰在使用你的伺服器。
SASL提供了一個通用的方法為基於連線的協定增加驗證支持,而XMPP使用了一個普通的XML名字空間來滿足SASL的需要。

SASL的使用

規則

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

敘述

⒈初始化實體請求SASL驗證,它傳送一個打開的XML流頭信息給接收實體,其'version'屬性的值為"1.0".
⒉在傳送一個XML流頭回復之後,接收實體聲明一個可用的SASL驗證機制清單;每個機製作為一個<mechanism/>;元素,作為子元素包含在<mechanisms/>;容器元素(其名字空間為'urn:ietf:params:xml:ns:xmpp-sasl')中,而<mechanisms/>;則包含在流名字空間中的<features/>;元素中。如果在使用任何驗證機制之前需要使用TLS(見第五章),接收實體不能(MUST NOT)在TLS握手之前提供可用的SASL驗證機制清單。如果初始化實體在優先的TLS協商過程中呈現了一個合法的證書,接收實體應該(SHOULD)在SASL握手中提出一個SASL外部機制給初始化實體,儘管這個外部機制可以(MAY)在其它環境下提供。
⒊初始化實體傳送一個符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<auth/>;元素(其中包含了適當的'mechanism'屬性值)給接收實體,以選擇一個機制。如果這個機制支持或需要,這個元素可以(MAY)包含XML字元數據(在SASL術語中,即“初始化應答”);如果初始化實體需要傳送一個零位元組的初始化應答,它必須(MUST)傳輸一個單獨的等號作為應答,這表示應答有效但不包含數據。
⒋如果必要,接收實體向初始化實體傳送一個符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<challenge/>;
⒌初始化實體向接收實體傳送符合'urn:ietf:params:xml:ns:xmpp-sasl'名字空間的<response/>;元素作為應答;
⒍如果必要,接收實體傳送更多的挑戰給初始化實體,初始化實體傳送更多的回應。

SASL定義

[SASL]的必要條件要求通過協定定義來提供以下信息:
⒈service name(服務名): "xmpp"
⒉initiation sequence(開始序列): 當初始化實體提供一個打開的XML流頭信息並且接收實體善意回應之後,接收實體提供一個可接受的驗證方法清單。初始化實體從這個清單中選擇一個方法,把它作為<auth/> 元素的'mechanism' 屬性的值傳送給接收實體,也可以選擇傳送一個初始化應答以避免循環。
⒊exchange sequence(交換序列): 挑戰和回應的交換,從接收實體傳送給初始化實體的<challenge/> 元素和從初始化實體傳送給接收實體的<response/> 元素信息。接收實體通過傳送<failure/>;元素報告失敗,傳送<success/>;元素報告成功;初始化實體通過傳送<abort/> 元素中止交換。成功的協商之後,兩邊都認為原來的XML流已經關閉並且都開始傳送新的流頭信息。
⒋security layer negotiation(安全層協商): 安全層在接收實體傳送<success/> 元素的關閉字元">"之後立刻生效,在初始化實體傳送<success/> 元素的關閉字元">"之後也立刻生效。層的順序是[TCP],[TLS],然後是[SASL],然後是[XMPP]。
⒌useof the authorization identity(授權ID的使用): 授權ID可在xmpp中用於表示一個客戶端的非預設的<node@domain>;,或一個伺服器的<domain>;。

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/>;元素時傳送。

熱門詞條

聯絡我們