轉自:http://blog.csdn.net/id19870510/article/details/8232509
SASL - 簡單認證和安全層
SASL是一種用來擴充C/S模式驗證能力的機制認證機制, 全稱Simple Authentication and Security Layer.
當你設定sasl時,你必須決定兩件事;一是用於交換“標識信 息”(或稱身份證書)的驗證機制;一是決定標識信息存儲方法的驗證架構。
sasl驗證機制規范client與server之間的應答過程以及傳輸內容的編碼方法,sasl驗證架構決定服務器本身如何存儲客戶端的身份證書以及如何核驗客戶端提供的密碼。
如果客戶端能成功通過驗證,服務器端就能確定用戶的身份, 並借此決定用戶具有怎樣的權限。
比較常見的機制;
4.1 plain(較常用)
plain是最簡單的機制,但同時也是最危險的機制,因為身份證書(登錄名稱與密碼)是以base64字符串格式通過網絡,沒有任何加密保護措施。因此,使用plain機制時,你可能會想要結合tls。
4.2 login
login不是其正式支持的機制,但某些舊版的mua使用這種機制,所以cyrus sasl讓你可選擇其是否支持login機制。如果你的用戶仍在使用這類老掉牙的mua,你必須在編譯sasl函數庫時,指定要包含login的支持。 login的證書交換過程類似plain。
4.3 otp
otp是一種使用“單次密碼”的驗證機制。此機制不提供任何加密保護,因為沒必要--每個密碼都只能使用一次,每次聯機都要改用新密碼。smto client必須能夠產生otp證書。
4.4 digest-md5(較常用)
使用這種機制時,client與server共享同一個隱性密碼,而且此密碼不通過網絡傳輸。驗證過程是從服務器先提出challenge(質詢)開始, 客戶端使用此challenge與隱性密碼計算出一個response(應答)。不同的challenge,不可能計算出相同的response;任何擁 有secret password的一方,都可以用相同的challenge算出相同的response。因此,服務器只要比較客戶端返回的response是否與自己算 出的response相同,就可以知道客戶端所擁有的密碼是否正確。由於真正的密碼並沒有通過網絡,所以不怕網絡監測。
4.5 kerberos
kerberos是一種網絡型驗證協議。除非你的網絡已經使用kerberos,否則你應該用不到kerberos機制;相對的,如果你的網絡已經架設了kerberos驗證中心,sasl就能完美的將smtp驗證整合進現有的體系。
4.6 anonymous
anonymous機制對smtp沒有意義,因為smtp驗證的用意在於限制轉發服務的使用對象,而不是為了形成open relay,sasl之所以提供這種機制,主要是為了支持其他協議。
當 客戶端鏈接到一個支持sasl的郵件服務器時,服務器會以優先級列出可用的機制供客戶端選擇。如果客戶端也支持多鍾機制,則當第一種機制驗證失敗時,客戶 端可能會繼續嘗試第二種機制,直到通過驗證或是所有機制都失敗為止。如果雙方在一開始就無法協調出共同的機制,驗證過程就算失敗。
一旦雙方在使用哪種機制上達成共識,就開始進行驗證過程。實際的交互過程隨機制而定,但通常包含一次或多次應答過程。驗證協議本身也規定了應答內容的編碼格式。
5. 總結
數字證書, 是級聯認證派發的, 最上層是根CA認證中心. 數字證書的根本作用, 是為了保證所有人公鑰的安全性和真實性. 大致認證過程是: 通過CA的公鑰來解出該CA所派發的證書里面所包含的公鑰(用戶或者機構的). 並通過該公鑰來驗證證書持有人的真實性. (因為持有人並不一定是證書所有人)
SASL是提供一種用戶身份認證機制, 你可以簡單認為是用來認證用戶的賬號/密碼是否運行進入系統或者使用系統的服務. 一般較長使用digest-md5, 該種機制下, 密碼可以不用在網絡上傳輸, 也就不用怕密碼被竊聽.
