默認情況下,SMTP流量是不被加密的,這就導致在公網上進行郵件溝通就像是在廣播一樣,任何人攔截到該郵件都可以輕而易舉的讀取其內容。但是現實場景中有許多敏感信息是通過郵件來進行發送的,所以其中一種保護郵件安全的方法就是使用傳輸層安全協議(Transport Layer Security)來提供SMTP流量在傳輸中的加密,受TLS保護的SMTP流量可以讓攔截/竊聽者無法讀取到SMTP流量的內容,但是它只提供傳輸過程中的保護,對於已經到達目標服務器,或者是在發件方本地服務器的郵件則沒法提供保護。
有兩種方法可以讓Exchange使用TLS,第一種也是最簡單的一種,叫做機會型TLS,意思是Exchange一有機會(對端服務器主動使用TLS)就會啟用TLS,默認情況下機會型TLS功能會一直開着,而且會使用Exchange安裝時候生成的自簽名證書(如果你沒指定證書的話)。Exchange 2013 還對所有遠程連接主動嘗試實現 TLS。
另一種是相互TLS,盡管TLS是一種傳輸層的加密,但是如果每台服務器通過驗證另一台服務器提供的證書來驗證這台服務器的身份的話,TLS也可以作為一種驗證方法。Lync就基於相互TLS,當然Exchange也可以配置成這樣。
機會型TLS不進行證書的有效性檢查,有個自簽名的證書它就認為是OK的,甚至是過期的證書也行。而相互TLS的應用要求則比較嚴格,因為Exchange會進行完整的證書檢查,包括證書的時效性,查看發行者的證書吊銷列表等等。
值得一提的是,Exchange 2013采用的是TLS V1.2,也是最新的TLS,其他的郵件服務器可能無法支持該版本,所以TLS的協商過程中,雙方會聲明自己的支持版本。在Microsoft Exchange上提供和接受的TLS版本、TLS會話中使用的加密算法,這些都是受Windows 安全通道子系統控制(即Schannel),關於如何查看或者修改Windows使用了那種加密算法,可以參考這篇Technet文章:https://technet.microsoft.com/en-us/library/cc784149(v=ws.10).aspx 雖然這篇文章標明for windows 2003,但是在現在的版本里依舊適用。
基本TLS
TLS實際上在所有的MBX的傳輸服務之間已經被啟用了(Technet描述是強制啟用的);向啟用TLS的服務器發出SMTP EHLO得到的回應里會包含一條STARTTLS命令,發送方收到這個響應后,就知道可以開始進行TLS協商,這是一個非常簡單的測試遠程服務器是否接受TLS流量的方法,即telnet連接到對方的smtp偵聽端口,發送一個EHLO,看看對方會不會返回STARTTLS。
配置發送連接器/接收連接器使用TLS非常簡單,使用Set-SendConnector 或者 Set-ReceiveConnector 帶上一個-RequireTls $True就可以打開該連接器的TLS選項,還有一個參數是-TlsCertificateName ,即為這個連接器的TLS指定一張作用證書,如果你不指定這個選項的話,默認Exchange采用你之前分配給SMTP服務的證書來進行TLS驗證。如果為SMTP應用了多張證書,那么Exchange會進行一個最優證書的選擇,首先會選擇一張使用者備用名稱里有本服務器FQDN的證書,如果沒選出來,有多張證書符合這個條件,那么就按照證書的有效日期排序,選擇最近的一張使用。
如果需要某個發送連接器避免使用TLS,那么只需要Set-SendConnector帶上一個-IgnoreSTARTTLS參數,打開這個選項后,該發送連接器不會宣告自己支持TLS,也不會發送STARTTLS給對方服務器。如果需要某個接收連接器不宣傳或是不接受TLS的話,就用Set-ReceiveConnector后面帶上SuppressXAnonymousTls的參數。注意如果你針對默認的接收連接器開啟了這個選項,會導致組織內的郵件流中斷,因為Exchange 2013設計在組織內部是必須使用TLS的。
還可以指定連接器上應用的TLS的保護等級,默認的TLS保護等級為只加密傳輸(EncryptionOnly)。可以通過TlsAuthLevel參數來控制,一共是一下三個等級:
-
EncryptionOnly:默認的,意思是連接器應該使用TLS加密傳輸,而不試圖驗證證書。
-
CertificateValidation:證書驗證,包括傳輸加密和基本證書檢查。雙方都互相擁有對方的證書,並且會驗證證書鏈和有效日期、吊銷列表等等。
-
DomainValidation:域驗證,最安全的等級。包括傳輸加密和證書檢查,並且驗證證書里包含的FQDN是否符合Set-SendConnector中帶的TlsDomain參數(沒有使用這個參數的話,則會去匹配發送者的SMTP域。)
比方說你需要確認在與微軟Outlook.com進行郵件交換時使用域驗證的TLS:
如果是接收連接器的話,參數就不是-TlsAuthLevel,而是-TlsDomainCapabilities。
使用域安全性
域安全性是使相互 TLS 成為有用並且容易管理的技術的功能集,例如證書管理、連接器功能和 Outlook 客戶端行為。
一台被配置使用TLS的服務器有兩種方法可以應用相互TLS驗證,默認是使用X.509證書驗證算法來驗證遠端證書的有效性。另一種就是Exchange會直接去檢查AD或者ADLDS里(邊緣角色與郵箱角色之間)是否確實存在這台服務器的證書,這種方法也被叫做(Direct Trust)直接信任,如果存在該證書,則證書有效。這個過程中,AD被作為是受信任的證書存儲。
Exchange在內部自動使用Direct Trust來支持X-ANONYMOUSTLS和相關聯的連接,然而域安全性無法運行在前端傳輸服務上,所以通過 Exchange 2013 客戶端訪問服務器路由出站電子郵件時,不支持域安全性。
如何查看一個站點是否支持TLS
使用CheckTLS.com這個網站可以很方便的查詢某個站點是否支持TLS,如下圖:
WAN優化設備和TLS
目前在復雜網絡環境下,存在一種設備叫WAN優化控制器,即偵聽和優化(壓縮)一些跨廣域網的站到站流量,這些設備大多數都支持MAPI和SMTP流量,但是如果碰上了TLS加密的流量,他們就得先解密才能進行流量優化。Technet上有這樣一篇文章告訴咱們如何將Exchange 配置為支持WAN優化控制器,如果在真實環境里碰到了,可以參考一下:https://technet.microsoft.com/zh-CN/library/ee633456%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396
TLS咱們就聊到這里。下一章我們就講講隊列……最近Exchange 2016發布,再加上手頭有兩個項目在同時進行,更新速度減緩了不少啊……