ESMTP身份驗證機制探索手記 (轉)
為了限制非本的正式利用散發垃圾郵件或進行其他不當行為,國內各大免費/收費提供商紛紛升級到ESMTP方式,開設了服務。在ESMTP伺服器上,傳送郵件需要對使用者的身份進行驗證。與傳統的SMTP方式相比,多了一道使用者身份的驗證手續,驗證之後的郵件傳送過程與傳統的SMTP方式一致。
幾乎所有的ESMTP伺服器都繼承了POP3伺服器的賬號和密碼設定體系,也就是說收發郵件用相同的賬號和密碼。當然,也可以用不同的賬號和密碼,但那樣無論是電子郵件服務提供商的維護還是使用者的使用都會很麻煩,故而很少採用。
ESMTP身份驗證的機制有很多種,最常見的是LOGIN機制,類似於POP3的身份驗證方式,即分兩步輸入賬號和密碼。在所有的驗證機制中,資訊全部採用Base64編碼。
例如,用smtp.elong.com傳送郵件,從開始連線到身份驗證的過程如下(紅色和藍色分別代表客戶端和伺服器):
(連線到smtp.elong.com:25) 220 sp1 ESMTP v2.1 EHLO ABCDEFG 250-smtp.elong.com 250-PIPELINING 250-SIZE 20480000 250-ETRN 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 (支援的身份驗證機制種類: LOGIN, PLAIN等) 250 8BITMIME AUTH LOGIN 334 VXNlcm5hbWU6 (Base64解碼後: Username:) Ymh3YW5n (Base64編碼前: bhwang) 334 UGFzc3dvcmQ6 (Base64解碼後: Pass:) bXlwYXNzd29yZCFteXBhc3N3b3JkISE= (Base64編碼前: ********) 235 Authentication succesul
另外一種較常見的機制是PLAIN。與LOGIN機制的不同之處在於一次性輸入賬號和密碼,格式為“ 有的ESMTP伺服器,例如採用Core系統的smtp.163.com, smtp.163, smtp.tom.com, smtp.netease.com等,不回覆334程式碼行,客戶端在輸入AUTH PLAIN後,直接輸入符合格式要求的賬號和密碼即可。
LOGIN和PLAIN機制沒有對賬號和密碼進行,相當於明文傳輸,Base64編碼只是一層紙而已。DIGEST-MD5, CRAM-MD5, GSS, KERBEROS_V4等身份驗證機制能夠加密傳輸內容。
以CRAM-MD5為例,身份驗證過程為: 其中,“5feb0c711ee0d3ae5e3eb087ea0e6a27”是用“<1127940816.1800394@smtp.elong.com>”與郵箱密碼進行MD5運算得到的HMAC。具體演算法可參考 1321, RFC 2104等。
首次釋出: -07-22 AUTH PLAIN 334 AGJod2FuZwBteXBhc3N3b3JkIW15cGFzc3dvcmQhIQ== (Base64編碼前:
a. 客戶端宣告用CRAM-MD5驗證方式
b. 伺服器提供一個標記(戳)
c. 客戶端用郵箱密碼做金鑰,以MD5方式加密此標記,生成HMAC;然後將使用者名稱連同HMAC傳送出去
d. 伺服器收到使用者名稱與HMAC,檢驗其正確性,給出回覆
AUTH CRAM-MD5 334 PDExMjc5NDA4MTYuMTgwMDM5NEBzbXRwLmVsb25nLmNvbT4= (Base64解碼後: <1127940816.1800394@smtp.elong.com>) Ymh3YW5nIDVmZWIwYzcxMWVlMGQzYWU1ZTNlYjA4N2VhMGU2YTI3 (Base64編碼前: bhwang 5feb0c711ee0d3ae5e3eb087ea0e6a27) 235 Authentication successful
[相關資源]
最後修訂: 2003-07-22
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960527/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- js正規表示式驗證手機,郵箱,身份證JS
- swift 郵箱、密碼、手機號、身份證驗證正則Swift密碼
- javascript 驗證身份證JavaScript
- JAX-RSREST客戶端實現基本身份驗證機制REST客戶端
- WEB身份驗證Web
- 身份證驗證工具類
- Apache基於MySQL的身份驗證(轉)ApacheMySql
- jQuery驗證手機號郵箱身份證的正規表示式(含港澳臺)jQuery
- 靜態密碼已經”OUT”探索身份驗證新方式密碼
- [譯]簡單的React身份校驗機制React
- 驗證手機、郵箱、漢字、身份證、URL、IP地址等java程式碼工具類Java
- jQuery如何用正規表示式驗證手機號、身份證號、中文名稱jQuery
- Oracle的身份驗證Oracle
- php與js方式驗證手機號碼和郵件地址的合法性,js驗證身份證號碼PHPJS
- PHP 驗證身份證號碼PHP
- 中國身份證號驗證庫
- C++身份證號驗證C++
- C#驗證身份證號C#
- java 實現從15位~18位的身份證號碼轉換,校驗中國大陸公民身份證、香港居民身份證、澳門身份證和臺灣身份證。Java
- 驗證碼機制之驗證碼重複使用
- java 雙向證書請求 雙向驗證機制 轉載Java
- php驗證手機號PHP
- 手機號碼驗證
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- js正則驗證身份證號JS
- PHP 身份證精確匹配驗證PHP
- 身份證號碼驗證系統
- 身份證號碼之js驗證JS
- oracle常見身份驗證Oracle
- 客戶端身份驗證客戶端
- Oracle服務端驗證機制Oracle服務端
- js驗證手機號碼JS
- 身份證號碼驗證演算法演算法
- js實現身份證號碼驗證JS
- JS驗證身份證的合法性JS
- jQuery正則驗證15/18身份證jQuery
- 淺談 Cookie-Session 、Jwt 兩種身份認證機制CookieSessionJWT