利用命令列發郵件

sekihin發表於2017-03-14

 

  • 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運算,如果得到相同的輸出則認證成功)

 

相關文章