- 1.與SMTP伺服器建立連線
c:\> telnet xxx.xxx.xxx.xxx 25 220 xxxxxxxxxx ESMTP Sendmail EHLO localhost 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH PLAIN LOGIN 250-DELIVERBY 250 HELP
- 2. AUTH PLAIN認證
基於明文的SMTP驗證,詳見:http://www.ietf.org/internet-drafts/draft-ietf-sasl-plain-08.txt
其傳送使用者名稱與口令的格式應該是“<NULL>tim<NULL>tanstaaftanstaaf”。“tim”是使用者名稱,後邊的字串是口令,NULL是ASCII的0(所以無法使用telnet登入)。
對認證字串“-UserID\0UserID\0Password”進行Base64編碼。
-> AUTH PLAIN <- 334 -> ASFasasERWcr= <- 235
- 3.AUTH LOGIN認證
分別對使用者名稱和密碼進行Base64編碼。
-> AUTH LOGIN <- 334 VXNlcm5hbWU6 -> BASE64編碼的使用者名稱 <- 334 UGFzc3dvcmQ6 -> BASE64編碼的密碼 <- 235
- 4.AUTH CRAM-MD5認證
CRAM-MD5即是一種Keyed-MD5驗證方式,CRAM是“Challenge-Response Authentication Mechanism”的所寫。所謂Keyed-MD5,是將Clieng與Server共享的一個Key作為一部分MD5的輸入,正好郵件系統的使用者口令可以作為這個Key。對伺服器的進行解碼。
以CRAM-MD5為例,身份驗證過程為:
a. 客戶端宣告用CRAM-MD5驗證方式
b. 伺服器返回一個標記(Base64編碼的隨機字串)
c. 客戶端用郵箱密碼做金鑰,以MD5方式加密此標記,生成HMAC;然後將使用者名稱連同HMAC傳送出去
d. 伺服器收到使用者名稱與HMAC,檢驗其正確性,給出回覆
-> AUTH CRAM-MD5 <- 334 PDExMjc5NDA4MTYuMTgwMDM5NEBzbXRwLmVsb25nLmNvbT4= (Server傳送BASE64編碼的Timestamp、Hostname等給Client。解碼後)<1127940816.1800394@smtp.elong.com>
-> Ymh3YW5nIDVmZWIwYzcxMWVlMGQzYWU1ZTNlYjA4N2VhMGU2YTI3 (Client將收到的資訊加上使用者名稱和口令,編碼為BASE64傳送給Server) <- 235 Authentication successful (Server使用該使用者的口令進行MD5運算,如果得到相同的輸出則認證成功)