(本文為筆者原創 非轉貼)

在郵件用戶端中,我們可以看到幾個關於連線安全性的設定選項,但究竟每種機制有什麼不同,該如何使用,一般的使用者卻不見得了解,今天筆者藉由自己一點的小經驗,與大家分享我的心得,如果有錯,也請多多包涵指教。

首先,我們必須了解到,郵件用戶端是一個電子郵件的client端程式,因此自然它必須連接到郵件伺服器去,而一般來說tb要寄信的時候,就會連結到所謂的smtp伺服器,而要收信時,就會連接到所謂的pop3或者是imap伺服器。

早期的smtp是沒有什麼認證機制的,因此也產生了許多的問題,比如說被惡質人士利用做為轉寄垃圾信的跳板。然而pop3這個協定一開始就包含基本的帳戶密碼認證機制,因此,也有一些同時具有smtp與pop3的mail server的implementation發明了一種所謂的pop3 before smtp這樣的機制,這個機制解釋起來並不複雜,也就是在允許客戶端的IP位址使用smtp寄信之前,要先讓該ip位址通過pop3的認證一次。以這樣的保護方式來說,總是比沒有好的。

現今主流的郵件伺服器,不論是smtp或pop3還是imap,都能提供完整的安全性解決方案,然而,安全性的等級卻有不同層級的區別。

第一種:首先我們來探討一下帳戶密碼認證的安全性問題,很明顯的,標準smtp,pop3,imap的連線,只是一般的tcp明文連線,透過這樣的clear text連線來傳戶密碼是沒有安全性可言的,只要簡單的工具,就可能攔截到您的帳戶密碼。一般來說在三種郵件協議中透過所謂的AUTH LOGIN或是AUTH PLAIN,或是利用USER PASS/LOGIN這樣的指令來傳送的,都屬於不安全的認證方式,但這樣的認證方式並非一無是處,基本上它最大的優點就是實作容易,一個實作容易的協議才能夠快速的被推廣與普及,況且,若這個session是建立在安全的連線上時(比如說TLS),透過這類明文的認證方式,依然是安全的。

第二種:具有安全性的帳戶密碼認證方式,基本上它的訴求就是這種機制必須要在透過明文連線,且可能被偷聽的狀況下,仍然能夠保持密碼的隱密性,這樣子的機制通常是透過一種所謂的"共享的秘密(即密碼)"以及"雜湊演算法"來達成,像是smtp及imap中的cram-md5以及apop都是具有這種特色的驗證方式,值得注意的是,md5演算法在這種機制上扮演了很重要的角色,但值得注意的是,在2004年,山東大學王小雲教授在一場國際密碼學會議中提出破解md5的研究報告,且目前已經有一些駭客推出了一些md5的破解相關工具,不過目前這樣的應用比較屬於能夠找出具有相同md5值的字串,而未必是密碼本身,因此基本上這樣的驗證機制還是具有相當的安全性可言的。

第三種:完整的連線的安全性,眾所皆知,smtp port 25,pop3 port 110,imap port 143然而,這三個標準的連接埠在預設的狀態都是屬於明文的連線的(無安全性),但是,以目前最新的應用來說,出現了一組相當重要的指令,能夠將這三個標準的連接埠升級到SSL(TLS)的安全性,這個指令就是STARTTLS(在POP3版本當中,叫STLS),基本上運作方式就是當郵件用戶端連線到郵件伺服器之後,觀察伺服器的性能清單(capability),然後送出STARTLS指令,等待伺服器回應允許或拒絕之後,就開始進行SSL或TLS的交涉,郵件用戶端還支援一組相當實用的TLSv1.1擴充命令叫做TLS SNI(Server Name Indication),也就是說在交涉的過程當中,會告知郵件伺服器目前想要連線的伺服器之網域名稱,讓伺服器能夠送出正確的ssl憑證,當然了郵件用戶端本身也會去驗證這個ssl憑證是否屬於有效的憑證,如果有誤,會跳出憑證錯誤的警告。當ssl/tls連線建立之後,不論用的是第一種或是第二種驗證方式,都能更加確保帳戶密碼的安全性。

除了以上的STARTTLS方式之外,尚存在著另一種ssl的連線方式,這種方式是直接以ssl連線到某個連接埠,通常smtp是465,pop3是995,imap是993,這種方式也就是俗稱的ssl connect或是implicit ssl。這種方式在現今的網路上,算是比較屬於被淘汰的方式,但仍然許多廠商都還是支援這樣的方式以確相容性,不過在可能的狀況下,筆者較為推薦STARTTLS,畢竟這樣只需要一個連接埠就夠了。

結語:光是單純的保戶帳戶密碼是不足以維護電郵的安全的,因為有時候,需要保密的東西並不光是帳戶與密碼,連郵件本身都是需要能夠保密的,因此,建議用戶們盡可能的使用ssl/tls方式與郵件伺服器進行連線。