1. 程式人生 > >你不知道的HTTP之HTTPS

你不知道的HTTP之HTTPS

發的 graph 實的 layer 這份 方式 發送 機構 加密

確保web安全的HTTPS

  HTTPS=HTTP+ 加密 + 認證 + 完整性保護

  1、加密:

    1)通信的加密

      所謂互聯網,是由能連通到全世界的網絡組成的。無論世界哪個角 落的服務器在和客戶端通信時,

      在此通信線路上的某些網絡設備、光 纜、計算機等都不可能是個人的私有物,所以在某個環節中都

      有可能會遭到惡意窺視行為。竊聽相同段上的通信並非難事。只需要收集在互聯網上流動的數據 包幀)就行了。

      對於收集來的數據包的解析工作,可交給那些抓包 (Packet Capture)或嗅探器(Sniffer)工具。

      所以,這時就需要對同信的過程進行加密,加密的方式就是通過和SSL(Secure Socket Layer,安全套接層)

      或 TLS(Transport Layer Security,安全層傳輸協議)的組合使用。

      這樣,就可以在這條較安全的通信線路上進行HTTP通信了。

    2)內容的加密

      通信的內容不經過任何處理的話,都將以明文的方式進行傳輸,這樣便很容易被人竊取到傳輸的信息,所以需要對

      參與通信的內容本身進行加密。由於 HTTP 協議中沒有加密機制,那麽就對 HTTP 協議傳輸的內容本身加密。

      這樣的方式要求客戶端和服務器同時具備加密和解密機制。

  2、認證

    HTTP 協議中的請求和響應不會對通信方進行確認。也就是說存在“服務器是否就是

    發送請求中 URI 真正指定的主機,返回的響應是否真的返回到實際提出請求的客戶端”等類似問題。

    那麽如果不確認通信方,就會存在各種隱患,為了解決這一問題,我們使用證書這一方法來解決。

    證書由值得信任的第三方機構頒發,用以證明服務器和客戶端是實際存在的。

    另外,偽造證書從技術角度來說是異常困難的一件事。所以 只要能夠確認通信方

    (服務器或客戶端)持有的證書,即可判斷通信方 的真實意圖。通過使用證書,

    以證明通信方就是意料中的服務器。這對使用者個 人來講,也減少了個人信息泄露的危險性。

    另外,客戶端持有證書即可完成個人身份的確認,也可用於對 Web 網站的認證環節。

  3、完整性  

    所謂完整性是指信息的準確度。若無法證明其完整性,通常也就意味著無法判斷信息是否準確。

    HTTP協議沒有辦法確認發出的請求 / 響應和接收到的請求 / 響應是前後相同的。像這樣,請求或響應在傳輸途中,

    遭攻擊者攔截並篡改內容的攻擊稱為中間人攻擊(Man-in-the-Middle attack,MITM)。

    HTTP本身有為了防止篡改的方法,常用的是 MD5 和 SHA-1 等散列值校驗的方法,以及用來確認文件的數字簽名方法。

    然而,用這些方法都無法百分百保證確認結果正確;僅靠 HTTP 確保完整性是非常困難的,因此需要通過和其他協議組合使用來實現這個目標。

  HTTPS是通過什麽方法來完成加密和認證的過程呢?

    1、其實HTTPS不是應用層的一種新協議。只是 HTTP 通信的接口部分用 SSL(Secure Socket Layer)

      和 TLS(Transport Layer Security)協議代替 而已。通常,HTTP 直接和 TCP 通信。當使用 SSL 時,

      則演變成先和 SSL 通信,再由 SSL 和 TCP 通信了。簡言之,所謂 HTTPS,其實就是身披 SSL 協議這

      層外殼的 HTTP。所以,在采用 SSL 後,HTTP 就擁有了 HTTPS 的加密、證書和完整性保護這些功能。

      所以,要想弄清楚加密和認證的過程,只需要知道SSL做了什麽就行了。

      1)公開密鑰加密技術:SSL 采用一 種叫做公開密鑰加密(Public-key cryptography)的加密處理方式。

          - 首先,我們在加密和解密時都會用到密鑰,過程中使用同一個密鑰的方式稱為共享密鑰加密

        也叫做對稱密鑰加密。以共享密鑰方式加密時必須將密鑰也發給對方,所以,在將密鑰發給對方的時候,

        就有可能會被攻擊者獲取到,這樣加密就失去了意義。

          - 公開密鑰加密的方式很好的解決了這一問題;我們使用兩把密鑰的公開密鑰加密,公開密鑰加密使

        用一對非對稱的密鑰。一把叫做私有密鑰(private key),另一把叫做公開密鑰(public key)。私有密

        鑰不能讓其他任何人知道,而公開密鑰則可以隨意發布,任何人都可以獲得。使用公開密鑰加密方式,發

        送密文的一方使用對方的公開密鑰進行加密處理,對方收到被加密的信息後,再使用自己的私有密鑰進行

        解密。利用這種方式,不需要發送用來解密的私有密鑰,也不必擔心密鑰被攻擊者竊聽而盜走。

          - HTTPS 采用共享密鑰加密和公開密鑰加密兩者並用的混合加密機制。若密鑰能夠實現安全交換,

        那麽有可能會考慮僅使用共享密鑰加密來通信。但是公開密鑰加密與共享密鑰加密相比,其處理速度要慢。

        所以應充分利用兩者各自的優勢,將多種方法組合起來用於通信。 在交換密鑰環節使用公開密鑰加密方式,

        之後的建立通信交換報文階段則使用共享密鑰加密方式。

          - 遺憾的是,公開密鑰加密方式存在無法證明公開密鑰本身就是貨真價實的公開密鑰的問題。所以為了解決

        這一問題,可以使用由數字證書認證機構(CA,Certificate Authority)和其相關機關頒發的公開密鑰證書。數

        字證書認證機構處於客戶端與服務器雙方都可信賴的第三方機構的立場上。認證流程如下:
            1)服務器的 運營人員向數字證書認證機構提出公開密鑰的申請;

            2)數字證書認證機構判明提出申請者的身份之後,會對已申請的公開密鑰做數字簽名;

            3)分配這個已簽名的公開密鑰,然後將該公開密鑰放入公鑰證書並綁定在一起;

            4)服務器將這份由數字證書認證機構頒發的公鑰證書發送給客戶端,以進行公開密鑰加密方式通信;

            5)接到證書的客戶端可使用數字證書認證機構的公開密鑰,對那張證書上的數字簽名進行驗證;

  以上便是HTTPS加密和認證的相關方法及過程。

你不知道的HTTP之HTTPS