網上說TLS的文章不少,要學習TLS技術有不少不錯的選擇。本文並非一個權威的教程,只是我我的學習TLS後基於本身理解的一個總結而已。若是有讀者經過閱讀此文後加深了對TLS的理解,不勝榮幸。web
要聊TLS,還得從HTTP提及,HTTP能夠說是做爲目前最流行的一個網絡協議,能夠說是網絡的基石之一。通常來講能夠理解爲從瀏覽器看到的全部東西,都是構建於HTTP之上的。算法
早期HTTP協議被設計成在一個可信網絡環境中運行,其設計理念以簡單爲主——經過一個通用格式的明文請求就可以獲取到各類文檔、樣式、腳本、富媒體內容等。瀏覽器
因爲其簡潔性,各類互聯網應用都得以在其之上進行充分的擴展,從最先的一個HTML文檔就是一個網頁,到現在打開一個淘寶首頁就有百八十個HTTP請求。各類類型的HTTP請求相互配合,組成了現在咱們所看到的繽紛多彩的互聯網世界。安全
然而,現在的互聯網環境紛繁複雜,HTTP的簡單也面臨兩個大的問題服務器
安全性沒法保證網絡
單次請求獲取一個文檔的方式,不知足現在流式傳輸體驗所要求的性能工具
本文主要着眼於安全性方面,第二點後續有機會再議。性能
致使安全問題的一個重要緣由是經過HTTP的請求及返回都是明文的,下面經過兩個例子說明。學習
其一是網絡運營商劫持問題。主要是指咱們的網絡運營商(電信、聯通、移動等)經過在咱們看的網頁中添加廣告,來謀取廣告費的問題。下面來看看他們是怎麼作的。網站
咱們所謂的『上網』大致分爲兩步,首先給咱們要上的網的服務器發送一個請求,而後接收到服務器返回的內容,瀏覽器將這些內容展現出來就是咱們看到的網頁了。咱們的請求並非直接發送給目標網站的服務器的,中間通過了層層的轉發。
如上圖所示,整個互聯網實際上是一個拓撲結構,咱們的請求往返於服務器之間,實際上是通過了不少個節點的(這裏只是簡單YY了一個三層的結構,實際網絡拓撲要複雜不少)。圖中橙色的節點就是咱們網絡運營商的節點了。按說運營商收了咱們的網費,好好的作好傳送數據的事情就行了。然而一些黑心運營商(幹這事的通常爲三四線城市的小運營商)在收了網費的同時還很差好乾活,在服務器的返回內容中插入他們本身的廣告,以此來多謀得一份廣告收入。
這裏隨便網上找了兩個被插入廣告的例子。
從第二個圖能夠看到,運營商經過解析HTTP請求返回的HTML內容,在其中插入一個iframe區塊,完成廣告的展示。這個事情自己沒難度(分析網絡請求的具體內容,有個專業術語叫『深度包檢測』),作不作就是運營商的節操問題了。
因爲這種現象仍是比較影響體驗的,所以一些網站踏上了全站HTTPS改造之路,不惜巨大改形成本和性能壓力,旨在避免運營商的流氓行徑,這裏先按下不表。
上述這種問題咱們總結下,屬於『可信(相對)』人員佔着『有利位置』,經過篡改請求來『某點小利』。這裏之因此說這些黑心運營商是『可信』,是由於他們雖然有能力作任何事,但畢竟本職是負責傳輸,除了打打小廣告以外,通常仍是可以保證傳輸內容的安全的。所以當你碰到這種狀況時沒必要過於緊張,打個電話投訴下也就完事了。
爲何強調『可信』這個概念,是相對於下面這個case來講的。『可信』的運營商在『有利位置』,這是沒辦法改變的。但要是咱們不當心把『不可信』的不法分子也放到『有利位置』,那恐怕就不是被打打廣告這個簡單了。所謂的『不可信』就是下圖這種狀況。
以前的圖中紅色節點是咱們家裏本身的wifi,那是能夠保證安全的。但若是你是出門在外,使用的是餐廳、咖啡館、酒店、機場的wifi,那還能保證安全嗎?固然不能!雖然通常公共場所提供wifi也就是個便民服務,沒啥心機。但假設你不幸鏈接到的是不法分子故意開放的wifi,那危害就很大了。
這些不法分子能夠窺探你全部的請求以及服務器的返回,那簡直就是想幹啥就幹啥了。如下爲YY場景。
假設正好你上的某個小衆網站技術水平不高,你的用戶名密碼都是以明文或可逆的加解密算法傳遞的話,不法分子就能拿到你的用戶名密碼了。固然不法分子可能對你的小衆網站並不感興趣,看了一眼就關了。可是他轉念一想,因爲記憶困難,通常人對不一樣網站用同一個密碼的可能性很大。所以他會拿着你的用戶名密碼去qq、淘寶、支付寶等大網站嘗試。一旦你真的用了一樣的密碼,那就中招了。再想得邪惡點,假設你看的那個簡陋的小衆網站,自己就在收集用戶名密碼呢?? 所以對於通常人來講,建議至少可以實行簡單的密碼分級,重要的大網站搞一個複雜的密碼,平時隨便看看的小衆網站就搞個簡單密碼吧。
你訪問的是正規網站,技術水平OK,密碼都是經過加鹽MD5傳輸的,那你就很安全?NO!在web應用中,每當用戶登陸時,服務器都會爲其生成一個『令牌』。在後續用戶的各類操做時,用戶都須要將這個『令牌』帶在請求中,以此來告訴服務器用戶的合法身份。不法分子徹底能夠經過分析web應用的請求,找到其中的令牌字段。一旦拿到這個令牌,那不法分子就擁有和用戶同樣的權限了。這個問題比上一個問題好一些的地方在於,令牌是有時效性的。好比今天一個用戶的令牌在訪問某網站時被人獲取了,那不法分子就能夠用這個令牌和真正的用戶一塊兒訪問該網站了。但若是真正的用戶退出登陸了,那不法分子這邊也就再也不能訪問了。同時拿了網站A的令牌只能訪問網站A,不法分子沒辦法去sh試網站BCD。
上兩個場景都須要不法分子提早對用戶訪問的網站進行分析,這樣才能知道哪一個字段纔是密碼或令牌。雖然有時不法分子水平通常,不能從請求中找到密碼或令牌。但至少用戶訪問的網站及內容是一目瞭然的。用戶發的微博、看的新聞、上傳的照片、心情日記等等隱私全都被暴露了,也難怪網上常常會爆出『XX門』了。
上述兩次例子中,運營商和公共wifi提供者要麼是竊聽了用戶的請求,要麼是往服務器的返回中加點料。無論具體方法是啥,問題的本質在於HTTP請求和返回都是明文的。致使一路上這麼多節點,每一個節點均可以拿點它須要的信息,或者往裏再加點料~
除此以外,HTTP的另外一個問題是無法校驗返回給你內容的服務器是不是目標服務器。這說的有些拗口,也無法找到真實的應用層實例,那咱們來看下相似的一個例子吧。
如圖所示是防火牆設備阻止用戶訪問特定網站的一種技術,有些公司會禁止員工訪問遊戲、股票等網絡服務,就會用到這種技術(國家有時候也能夠看作一個公司?)。HTTP基於TCP/IP協議之上,藉助DNS協議的配合,幫助用戶只須要記住一個好記的單詞(域名或叫網址),就能訪問到特定的網絡服務。這個路由的原理不在本文範圍以內,但TCP/IP + DNS + HTTP這套機制可以work的緣由一樣基於一個假設——網絡環境是可信的,網絡中的每一個節點都會按照協議要求有序運做。上圖中的橙色節點在用戶訪問百度時正常工做,但在訪問youtube時則沒有把請求往上傳遞,而是直接回複用戶不能響應請求。(TCP RST爲斷開TCP鏈接)還有一種狀況下請求仍是往上傳遞到目標服務器了,但中間節點卻提早回覆了一個TCP RST。用戶端瀏覽器收到一個TCP RST後並不知道真相,覺得是要訪問的服務拒絕了咱們的請求,所以就關閉了請求。而實際上服務器是無辜的,有節點假裝了它。
上述例子仍是咱們『可信』的運營商或者防火牆提供商進行網絡管理的一種手段,其結果也就是用戶上不了某些網站而已,影響不是太大。和明文問題同樣,要是碰到的是一個『不可信』的節點,那問題就大得多。
上圖是網上找的一個釣魚網站的例子,這個問題你們如今都很注意了。不法分子將假網站作的和真網站如出一轍,經過聊天工具或短信騙用戶點擊訪問,企圖利用假網站騙取用戶的用戶名密碼。這種作法可以被大多數人注意的緣由是其網址和真網站不一樣,但若是把釣魚網站這個方式往上面的例子套,那就徹底能以假亂真了。這種問題對於HTTP請求來講幾乎沒有分辨的辦法。
上述兩個例子都是用戶沒有訪問到真正的目標服務器,而是由某個惡意節點假裝成目標服務器給用戶返回了內容。這種方式在通常的上網過程當中是幾乎沒法分辨的,只有技術人員刻意進行分析時,才能發現這種假裝HTTP服務器的狀況。
至此全文一共聊了四個例子,說明了HTTP存在的兩個安全問題
明文
沒法驗證服務器的真實性
爲了解決這兩個問題,咱們引入TLS(傳輸層安全)協議。運行在TLS協議之上的HTTP協議稱做HTTPS,簡而言之你們平常上網時儘可能使用HTTPS網址來代替HTTP網址,就能夠大大提到安全性了~
上篇結束,下篇會介紹下TLS的大體原理,解釋其爲啥可以保證安全。