什麼是https協議

1. HTTP和HTTPS概念

HTTP:是互聯網上應用最爲廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。

HTTPS:是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。HTTPS協議的主要作用可以分爲兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。

2. HTTP傳輸的風險

HTTP(超文本傳輸協議)被用於在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密。
所有信息明文傳播,帶來了三大風險:

(1) 竊聽風險(eavesdropping):第三方可以獲知通信內容。
(2) 篡改風險(tampering):第三方可以修改通信內容。
(3) 冒充風險(pretending):第三方可以冒充他人身份參與通信。

如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此,HTTP協議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息。

3. HTTPS對HTTP的改進

HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,爲了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

 

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

HTTPS和HTTP的區別主要如下:

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。

4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

4. SSL/TLS協議

4.1 SSL協議的握手過程

開始加密通信之前,客戶端和服務器首先必須建立連接和交換參數,這個過程叫做握手(handshake)。

假定客戶端叫做愛麗絲,服務器叫做鮑勃,整個握手過程可以用下圖說明(點擊看大圖)。

握手階段分成五步。

第一步,愛麗絲給出協議版本號、一個客戶端生成的隨機數(Client random),以及客戶端支持的加密方法。

第二步,鮑勃確認雙方使用的加密方法,並給出數字證書、以及一個服務器生成的隨機數(Server random)。

第三步,愛麗絲確認數字證書有效,然後生成一個新的隨機數(Premaster secret),並使用數字證書中的公鑰,加密這個隨機數,發給鮑勃。

第四步,鮑勃使用自己的私鑰,獲取愛麗絲髮來的隨機數(即Premaster secret)。

第五步,愛麗絲和鮑勃根據約定的加密方法,使用前面的三個隨機數,生成"對話密鑰"(session key),用來加密接下來的整個對話過程。

上面的五步,畫成一張圖,就是下面這樣。

 

image

 

4.2 私鑰的作用

握手階段有三點需要注意。

(1)生成對話密鑰一共需要三個隨機數。

(2)握手之後的對話使用"對話密鑰"加密(對稱加密),服務器的公鑰和私鑰只用於加密和解密"對話密鑰"(非對稱加密),無其他作用。

(3)服務器公鑰放在服務器的數字證書之中。

從上面第二點可知,整個對話過程中(握手階段和其後的對話),服務器的公鑰和私鑰只需要用到一次。這就是CloudFlare能夠提供Keyless服務的根本原因。

某些客戶(比如銀行)想要使用外部CDN,加快自家網站的訪問速度,但是出於安全考慮,不能把私鑰交給CDN服務商。這時,完全可以把私鑰留在自家服務器,只用來解密對話密鑰,其他步驟都讓CDN服務商去完成。

上圖中,銀行的服務器只參與第四步,後面的對話都不再會用到私鑰了。

4.3 DH算法的握手階段

整個握手階段都不加密(也沒法加密),都是明文的。因此,如果有人竊聽通信,他可以知道雙方選擇的加密方法,以及三個隨機數中的兩個。整個通話的安全,只取決於第三個隨機數(Premaster secret)能不能被破解。

雖然理論上,只要服務器的公鑰足夠長(比如2048位),那麼Premaster secret可以保證不被破解。但是爲了足夠安全,我們可以考慮把握手階段的算法從默認的RSA算法改爲Diffie-Hellman算法

採用DH算法後,Premaster secret不需要傳遞,雙方只要交換各自的參數,就可以算出這個隨機數。

 

上圖中,第三步和第四步由傳遞Premaster secret變成了傳遞DH算法所需的參數,然後雙方各自算出Premaster secret。這樣就提高了安全性。

4.4 session的恢復

握手階段用來建立SSL連接。如果出於某種原因,對話中斷,就需要重新握手。

這時有兩種方法可以恢復原來的session:一種叫做session ID,另一種叫做session ticket。

session ID的思想很簡單,就是每一次對話都有一個編號(session ID)。如果對話中斷,下次重連的時候,只要客戶端給出這個編號,且服務器有這個編號的記錄,雙方就可以重新使用已有的"對話密鑰",而不必重新生成一把。

上圖中,客戶端給出session ID,服務器確認該編號存在,雙方就不再進行握手階段剩餘的步驟,而直接用已有的對話密鑰進行加密通信。

session ID是目前所有瀏覽器都支持的方法,但是它的缺點在於session ID往往只保留在一臺服務器上。所以,如果客戶端的請求發到另一臺服務器,就無法恢復對話。session ticket就是爲了解決這個問題而誕生的,目前只有Firefox和Chrome瀏覽器支持。

上圖中,客戶端不再發送session ID,而是發送一個服務器在上一次對話中發送過來的session ticket。這個session ticket是加密的,只有服務器才能解密,其中包括本次對話的主要信息,比如對話密鑰和加密方法。當服務器收到session ticket以後,解密後就不必重新生成對話密鑰了。

5. HTTPS比HTTP慢的說明

理論上HTTPS會使網站訪問速度變慢,因爲HTTPS比HTTP多出了SSL握手環節。HTTP鏈接比較單純,使用三個握手數據包建立連接之後,就可以發送內容數據了。

 

http連接

上圖中,客戶端首先發送SYN數據包,然後服務器發送SYN+ACK數據包,最後客戶端發送ACK數據包,接下來就可以發送內容了。這三個數據包的發送過程,叫做TCP握手。而HTTPS鏈接,它也採用TCP協議發送數據,所以它也需要上面的這三步握手過程。而且,在這三步結束以後,它還有一個SSL握手。

總結一下,就是下面這兩個式子。

HTTP耗時 = TCP握手

HTTPs耗時 = TCP握手 + SSL握手

所以,HTTPs肯定比HTTP耗時,這就叫SSL延遲。

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