Java網絡編程(四):Http與Https相關總結(雷驚風)

一.概念

      1. Http:Http英文全稱爲Hypertext Transfer Protocol,及超文本傳輸協議,它是當今互聯網應用最爲廣泛的一種網絡協議。所有的以WWW開頭訪問的網站都必須遵循這個標準。設計最初目的是爲了實現一種發佈和接收HTML頁面的方法。美國人Ted Nelson於1960年構思了通過計算機處理文本信息的方法,並稱爲超文本,成爲HTTP傳輸協議發展的基礎。Ted Nelson組織萬維網協會(WWWC)和互聯網工程工作小組(IETF)共同研究,最終發佈一系列RFC,目前最著名的就是RFC2616定義的HTTP1.1。它會使瀏覽器更加高效,使網絡傳輸減少,可以保證計算機正確快速的傳輸超文本文檔。

     2. Https:Https的英文全稱爲Secure Hypertext Transfer Protocol,及安全超文本傳輸協議,它是基於HTTP開發的,它會建立一個安全的信息傳輸通道,用於客戶端與服務端進行數據傳輸。它使用安全套接字層(SSL)作爲Http 應用層子層。SSL使用40位關鍵字作爲RC4流加密算法。它更適用於商業信息的加密。HTTPS的SSL支持使用X.509數字認證,並且用戶可以知道發送者信息。

二.區別

     1. Http是不安全的,無狀態的連接,在1.0版本中每次訪問網絡獲取數據都需要重新建立連接。Https在Http基礎上加入了SSL加密,使得Http協議可以建立安全通信通道,對傳輸的數據進行加密,同時可以驗證自己當前訪問的網絡是否是真正的目的網絡服務器。所以Https比Http更爲安全。

     2. 由於Https需要用到CA證書來驗證身份信息,而獲取CA證書需要到專門頒發CA證書的機構進行申請,所以,Https會產生一部分CA證書獲取費用成本。

     3. Http默認使用80端口,而Https則默認使用443端口。

三.實現原理

Http:

當我們訪問一個網址的時候,如http://ocalhost:8097/lyl/index.html

      1. 系統會將URL進行分解,分解爲協議、主機名、端口、路徑等。例如上邊的地址:

         協議部分:http

         主機名:localhost

         端口:8097。

         路徑:/lyl/index.html

#這裏如果主機名部分是非IP地址的話,需要DNS域名解析系統將主機名解析成對應的IP地址。

      2. 封裝Http 數據包,一個請求有四部分組成:請求行、請求頭、空行、請求數據。請求行有三個部分(請求方法,請求URI與當前Http版本,用空格分割,如: GET /lyl/index.html HTTP/1.1),請求頭是由多組Key/Value鍵值對組成,每行一組,這些鍵值對用來告訴服務器關於客戶端的一些功能與標示,請求頭Key有很多例如:

      User-Agent客戶端廠家和版本;

      Accept:客戶端可識別的內容類型列表;

      Content-Length:附加到請求的數據字節數。

      ......

空行:通知服務器下邊部分不再是請求頭內容。請求數據:只有  當請求方式爲post時纔有值(請求參數),如果請求方式爲get,請求參數會添加到請求資源路徑的後面。

     3. 建立TCP連接,在Http開始傳遞數據之前,必須先於服務端建立連接,而建立連接需要客戶端與服務端進行3次TCP握手:

         ①客戶端向服務器發送建立連接請求,其中報文中SYN=1,ACK=0,表示這是一個TCP連接請求數據報文;序號seq=x,表明傳輸數據時的第一個數據字節的序號是x;

         ②服務器收到請求後,會回發連接確認數據包。其中SYN=1,ACK=1,表示這是一個TCP連接相應數據報文。並含有服務端的初始序列號seq=y,以及服務端對刻畫端A初始序列號的確認號ack=x+1.

         ③客戶端收到服務端的確認連接報文後,再次作出確認,發送一個序列號seq=x+1,確認號ack=y+1的報文。

     4. 客戶端發送請求命令。客戶端與服務端建立連接後,客戶端會發送一個請求給服務端,請求方式的格式爲:統一資源標識符、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和內容。

     5. 服務端接收到請求後,回覆相應的響應。格式爲一個狀態行,包含協議版本號、一個成功或錯誤編碼,狀態行後邊是MIME信息包括服務器信息、實體信息和內容。實體信息就是服務端向客戶端發送頭信息後會發送一個空白行來表示頭信息的發送到此結束。然後以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。

     6. 服務端關閉TCP連接。如果客戶端或者服務端沒有添加Conention:keep-alive,那麼服務端向客戶端發送了數據,服務端會馬上關閉TCP連接,反之,TCP連接在發送信息後仍然保持打開狀態,以便客戶端與服務端能夠通過相同的連接發送請求。這樣節省了爲每次請求建立連接的時間,同時節約了帶寬。

Https:

     ① SSL客戶端通過TCP和服務器建立連接之後(443端口),並且在一般的tcp連接協商(握手)過程中請求證書。

即客戶端發出一個消息給服務器,這個消息裏面包含了自己可實現的算法列表和其它一些需要的消息,SSL的服務器端會迴應一個數據包,這裏面確定了這次通信所需要的算法,然後服務器向客戶端返回證書。(證書裏面包含了服務器信息:域名。申請證書的公司,公共祕鑰)。                 
    ② Client在收到服務器返回的證書後,判斷簽發這個證書的公共簽發機構,並使用這個機構的公共祕鑰確認簽名是否有效,客戶端還會確保證書中列出的域名就是它正在連接的域名。

   ③ 如果確認證書有效,那麼生成對稱祕鑰並使用服務器的公共祕鑰進行加密。然後發送給服務器,服務器使用它的私鑰對它進行解密,這樣兩臺計算機可以開始進行對稱加密進行通信。

四.Https對比Http優缺點

優點:

     1. Https 可以對客戶端與服務器進行認證,確保數據發送到的是正確的目的地址。

     2. 因爲Https在傳輸數據是建立了一個安全的數據傳輸通道,所以可以提高數據的安全(只是提高,並非絕對安全),有效的防止了除客戶端服務端以外的其他單位、個人等等監聽、竊取、修改數據。

     3. Https是目前最爲安全的網絡訪問傳輸協議,但非絕對安全,但是提高了破解成本。

     4. 2014年8月份谷歌調整了其相關引擎算法,採用Https的網站在搜索結果中會比Http的搜索排名更靠前。

缺點:

    1. 由於Https是需要CA證書認證的,還有加密解密,所以對比Http來說,它是既費時又費電的,大概增加50%耗時,10%~20%耗電。

    2. Https連接緩存不如Http高效,會增加數據開銷與功耗,很可能影響已有的安全措施。

    3. 由於Https需要CA證書認證,而獲取CA需要到專門機構,所以會需要一些費用。有些人認爲SSL證書很貴,其實我們在網上搜一下,也會搜到很多便宜的SSL證書,大概10美元一年,還有一些免費的證書,當然,免費的會比收費的差一點。但是幾乎所有的主流瀏覽器都接收這些證書。

    4. SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗。

    5. HTTPS協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什麼作用。最關鍵的,SSL證書的信用鏈體系並不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章