2016年2月29日 星期一

FTP也可以安全一點 - 與SSL/TLS的交集 v1.0

接續上一篇發文提到的 TLS(Transport Layer Security 傳輸層安全協定) 與 SSL(Secure Sockets Layer 安全通訊協定), 所以順道了解也記錄一下.

SSL為TLS的前身,目前最新的版本為 TLS v1.2,兩者皆是為了網路資料交換安全所訂定;由於早期利用網路傳遞資料(如:HTTP、FTP)在安全上有不少的漏洞,所以也就有這樣的機制產生。

TLS與 SSL運作於 IOS 網路架構的傳輸層(TCP Layer)與應用層(Application Layer)之間,所以只要 TLS 的協商完成後,其上的應用程式在進行資料傳輸時自然得以在保密中進行。最早的應用也是大家最常看到的 WWW 的服務,近年來越來越多的服務也開始支援,本文中的 FTP 即是一個例子,其他如電子郵件、即時通訊、VoIP、網路傳真等應用程式都陸陸續續開始用。

運作方式:
伺服器端與客戶端各須要有一組非對稱的金鑰(公/私鑰),雙方要把公鑰傳給對方,用來加密傳送的資料,而加密的資料只能用自己的私鑰解密;此外為了表示對方的真實性,還須要一個憑證,且它應該由第三方公正機關來發給,但除非是較嚴謹的機關,否則這個憑證可以由伺服端自行產生。

1.首先客戶端會先傳送一些加密連線的參數及協定版本(如:tls v1.1)等資料給伺服器端,在這階段資料傳送是明碼的方式傳送方式,這個動作稱為「ClientHello」。
2.伺服器在收到「ClientHello」也會回傳並確認加密連線參數及使用的協定版本(如:tls v1.1),此外還會包含伺服器自己本身的公鑰及上頭提到的憑證,目前為此資料也還是以明碼的方式傳送,加密還沒開始,此動作稱為「ServerHello」。
3.此時雙方己經把加密連線所要用到的參數都確定好了,客戶端也取得了伺服器端的公鑰及憑證,接下來伺服器端會向客戶端要求傳回客戶端的公鑰及憑證。
4.收到伺服器端的請求後,客戶端會將自己的公鑰及憑證以伺服器的公鑰加密傳回給伺服器端,但如果客戶端沒有憑證的話,則會使用一個隨機產生的亂數來代替;從這個階段開始,資料的傳輸己經在加密中進行了(客戶端的公鑰會以伺服器的公鑰加密傳回給伺服器,伺服器再用自己的私鑰解開)。
5.用戶端與伺服器通過公鑰保密協商,各自用私鑰解密。資料傳輸中的記錄層(Record layer)用於封裝更高層的HTTP等協定,所以它可以保護上層協定的安全。此交握手完成後如果關閉或任何一個步驟失敗,那麼連線便會被斷開。

參考資料:維基百科-傳輸層安全協議 https://zh.wikipedia.org/wiki/%E5%82%B3%E8%BC%B8%E5%B1%A4%E5%AE%89%E5%85%A8%E5%8D%94%E8%AD%B0

沒有留言:

張貼留言