一、簡述
1??HTTP (全稱 Hyper Text Transfer Protocol),就是超文本傳輸協議,用來在 Internet 上傳送超文本。是互聯網上應用最為廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),用于從 WWW 服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。
2??HTTPS:安全超文本傳輸協議。簡單講是 HTTP 的安全版,即 HTTP 下加入 SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。
HTTPS 的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
超文本傳輸協議 HTTP 被用于 Web 瀏覽器和網站服務器之間傳遞信息,HTTP 以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了 Web 瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息。因此,HTTP 不適合傳輸敏感信息,比如:資金賬戶、密碼等。為了解決 HTTP 的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議 HTTPS,為了數據傳輸的安全,HTTPS 在 HTTP 的基礎上加入了 SSL 協議,SSL 依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。
二、HTTP與HTTPS的區別
HTTP 傳輸的數據都是未加密的,也就是明文的,因此使用 HTTP 傳輸信息非常不安全。為了保證數據能加密傳輸,網景公司設計了 SSL(Secure Sockets Layer) 協議用于對 HTTP 傳輸的數據進行加密,從而就誕生了 HTTPS。二者主要區別如下:
1??HTTPS 需要到 ca 申請證書,一般免費證書較少,因而需要一定費用。
2??HTTP 信息是明文傳輸,HTTPS 則是具有安全性的 ssl 加密傳輸協議。
3??HTTP 和 HTTPS 連接方式完全不同,端口也不一樣,前者是 80,后者是 443。
4??HTTP 的連接很簡單,是無狀態的。HTTPS 是由 SSL+HTTP 構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 安全。
三、HTTPS的工作原理
由于 HTTPS 能夠加密信息,避免敏感信息被第三方獲取,所以很多銀行網站或電子郵箱等等安全級別較高的服務都會采用 HTTPS。客戶端在使用 HTTPS 方式與 Web 服務器通信時有以下幾個步驟,如圖所示。
1??客戶使用 HTTPS 的 URL 訪問 Web 服務器,要求與 Web 服務器建立 SSL 連接。
2??Web 服務器收到客戶端請求后,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
3??客戶端的瀏覽器與 Web 服務器開始協商 SSL 連接的安全等級,也就是信息加密的等級。
4??客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然后利用網站的公鑰將會話密鑰加密,并傳送給網站。
5??Web 服務器利用自己的私鑰解密出會話密鑰。
6??Web 服務器利用會話密鑰加密與客戶端之間的通信。
四、HTTPS的優點
盡管 HTTPS 并非絕對安全,掌握根證書的機構、掌握加密算法的組織同樣可以進行中間人形式的攻擊,但 HTTPS 仍是現行架構下最安全的解決方案,主要有以下幾個好處:
?1??使用 HTTPS 可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
2??HTTPS 是由 SSL+HTTP 構建的可進行加密傳輸、身份認證的網絡協議,要比 HTTP 安全,可防止數據在傳輸過程中不被竊取、改變,確保數據的完整性。
3??HTTPS 是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
4??谷歌曾在2014年8月份調整搜索引擎算法,并稱“比起同等 HTTP 網站,采用 HTTPS 加密的網站在搜索結果中的排名將會更高”。
五、HTTPS的缺點
1??HTTPS 握手階段比較費時,會使頁面的加載時間延長近 50%,增加 10% 到 20% 的耗電;
2??HTTPS 連接緩存不如 HTTP 高效,會增加數據開銷和功耗,甚至已有的安全措施也會因此而受到影響;
3??SSL 證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用。
4??SSL 證書通常需要綁定 IP,不能在同一 IP 上綁定多個域名,IPv4 資源不可能支撐這個消耗。
5??HTTPS 的加密范圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什么作用。最關鍵的,SSL 證書的信用鏈體系并不安全,特別是在某些國家可以控制 CA 根證書的情況下,中間人攻擊一樣可行。
六、如何將網站從HTTP切換到HTTPS
需要將頁面中所有的鏈接,例如 js,css,圖片等等鏈接都由 HTTP 改為 HTTPS。例如:http://www.baidu.com/
改為https://www.baidu.com/
。
這里雖然將 HTTP 切換成了 HTTPS,還是建議保留 HTTP。所以在切換的時候可以做 HTTP 和 HTTPS 的兼容,具體實現方式是,去掉頁面鏈接中的 HTTP 頭部,這樣可以自動匹配 HTTP 頭和 HTTPS 頭。例如:將http://www.baidu.com/
改為//www.baidu.com
。然后當用戶從 HTTP 的入口進入訪問頁面時,頁面就是 HTTP,如果用戶是從 HTTPS 的入口進入訪問頁面,頁面即是 HTTPS 的。
七、理解HTTPS
對于這種情況,可以使用加密方案應對。比如使用 AES 加密,服務端和客戶端先約定一個隨機生成的密鑰 key ,后續的通信中,所有的信息都使用這個密鑰進行 AES 加密:
既然都使用了不對稱加密,為啥只對 AES 的密鑰做不對稱加密,好像多此一舉,完全可以對后續所有的通信信息全都使用不對稱加密。因為不對稱加密相比較對稱加密性能上存在明顯的劣勢,可能一個請求中多消耗幾 ms 或者幾 ns 無所謂,但是請求到達服務端是要進行解密,每個請求都多消耗幾 ms 累計起來還是非常可怕的。
上面方案看起來很安全,中間人即使攔截到公鑰,由于不知道私鑰貌似也沒辦法解密。實際上中間人完全不需要解密信息,他可以生成一對新的公私鑰發送給客戶端,后續中間人使用自己創造的私鑰進行解密,然后通過服務端生成的公鑰進行加密返回給服務端,以此達到攻擊的目的:CA 證書
上面的問題僅通過客戶端和服務端已經沒辦法了,這時候需要引入新的第三方機構,一個頒發 CA 證書的機構。常見的第三方 CA 機構有:Symantec(賽門鐵克)、Comodo(科莫多)、GeoTrust(環度網信)、GoDaddy、Thawte和daoRapidSSL等等。
在中間人攻擊中,遇到的問題不是加密算法不夠神奇,不是密鑰方式不夠嚴謹,而是無法向客戶端表明給到的公鑰是服務端的,是不是很像無法證明我是我的問題。
所以第三方機構應運而生,第三方機構只做一件事情,將服務端的公鑰刻上了名字(CA 證書),客戶端接收到公鑰之后,只需要來第三方機構這里查詢,就能知道這個公鑰是不是真的服務器,然后再將自己生成的 AES 密鑰使用 CA 證書中解密得到的公鑰進行加密后發送給服務端。最后服務端使用私鑰解密得到 AES 密鑰,就可以愉快的和客戶端進行通信了。CA 機構驗證不是每次都要去 CA 機構查詢。這樣做未免太耗時,尤其是很多 CA 機構的服務都在海外,這樣一來一去消耗的時間太多了。CA 機構高明的地方就在于,我們去找它注冊公鑰,它會使用另一個來注冊的公司的私鑰對我們的公鑰加密,得到一個我們的公鑰的指紋(全球唯一),然后將這家公司的公鑰信息(其實也是證書)和我們的公鑰以及我們公鑰的指紋打包成一個證書。
當使用 HTTPS 將證書下發給客戶端校驗時,客戶端(比如瀏覽器)從證書中看到了上級證書的信息,恰巧這個證書就在瀏覽器(或者本機)中,已經被驗證過是合法的,瀏覽器只要使用這個證書中的公鑰將我們的公鑰指紋進行解密,然后比對我們的公鑰信息就知道我們也是的合法的。因為假證書中的公鑰簽名不可能被合法的上級證書中公鑰解密 。