一、基本概念
1、HTTP:超文本傳輸協議(Hyper Text Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標準。是一個客戶端和服務器端請求和應答的標準(TCP),用于從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先于圖形)等。
2、HTTPS:安全套接字層超文本傳輸協議(Hyper Text Transfer Protocol over Secure Socket Layer)。以安全為目標的HTTP通道,簡單講是HTTP的安全版本,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰,也就是說它的主要作用可以分為兩種:
?。?)建立一個信息安全的通道,來保證數據傳輸的安全;
?。?)確認網站的真實性。
二、具體區別
HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,為了保證這些隱私數據加密傳輸,網景公司設計了SSL(Secure Sockets Layer)協議用于對HTTP協議傳輸的數據進行加密,從而誕生了HTTPS。具體的區別如下:
1、HTTPS更安全:HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比HTTP協議的信息明文傳輸安全;
2、HTTPS需要申請證書:HTTPS協議需要到CA申請證書,一般免費證書很少,需要交費,費用大概與.com域名差不多,每年需要大約幾十元的費用。而常見的HTTP協議則沒有這一項;
3、端口不同:HTTP使用的是大家最常見的80端口,而HTTPS連接使用的是443端口;
4、安全性不同:HTTP的連接很簡單,是無狀態的。而HTTPS協議是HTTP協議+SSL構建的可進行加密傳輸、身份認證的網絡協議,要比HTTP協議安全;
三、HTTPS具體工作
HTTPS連接時,服務器要求有公鑰和簽名的證書。使用HTTPS連接,服務器響應初始連接,并提供它所支持的加密方法,作為回應,客戶端選擇一個連接方法,并且客戶端和服務器端交換證書驗證彼此身份,完成后在確保使用相同密鑰的情況下傳輸加密信息,然后關閉連接,為了提供HTTPS連接支持,服務器必須有一個公鑰證書,該證書包含經過證書機構認證的密鑰信息,大部分證書都是通過第三方機構授權的以保證證書是安全的。
HTTPS跟HTTP一樣,只不過增加了SSL。
1、HTTP包含如下動作:
?。?)瀏覽器打開一個TCP連接
?。?)瀏覽器發送HTTP請求到服務器端
?。?)服務器發送HTTP回應信息到瀏覽器
?。?)TCP連接關閉
2、SSL包含如下動作:
?。?)驗證服務器端;
?。?)允許客戶端和服務器端選擇加密算法和密碼,確保雙方都支持
?。?)驗證客戶端(可選)
?。?)使用公鑰加密技術來生成共享加密數據
?。?)創建一個加密的SSL連接
?。?)基于該SSL連接傳遞HTTP請求
四、HTTPS的工作原理
我們都知道HTTPS能夠加密信息,以免敏感信息被第三方獲取,所以很多銀行網站或電子郵箱等安全級別較高的服務都會采用HTTPS協議。
1、客戶端發起HTTPS請求
就是用戶在瀏覽器里輸入一個HTTPS網址,然后連接到服務器的443端口。
2、服務端的配置
采用HTTPS協議的服務器必須要有一套數字證書,可以自己制作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面。
這套證書其實就是一對公鑰和私鑰,如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然后發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。
3、傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。
4、客戶端解析證書
這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。
如果證書沒有問題,那么就生成一個隨機值,然后用證書對該隨機值進行加密,就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。
5、傳送加密信息
這部分傳送的是用證書加密后的隨機值,目的就是讓服務端得到這個隨機值,以后客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
6、服務端解密信息
服務端用私鑰解密后,得到了客戶端傳過來的隨機值(新的私鑰),然后把內容通過該值進行對稱加密,所謂對稱加密就是,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密算法夠彪悍,私鑰夠復雜,數據就夠安全。
7、傳輸加密后的信息
這部分信息是服務段用私鑰加密后的信息,可以在客戶端被還原。
8、客戶端解密信息
客戶端用之前生成的私鑰(隨機值)解密服務段傳過來的信息,于是獲取了解密后的內容,整個過程第三方即使監聽到了數據,也束手無策。