HTTPS全稱為Hyper Text Transfer Protocol over Secure Socket Layer,國內稱其為安全超文本傳輸協議。
大家可以把HTTPS直接理解為HTTP+SSL/TLS,簡單來說它是在HTTP的基礎上增加了一道保密協議,以此來對文本傳輸的過程加密,保障安全性的一種數據傳輸協議類型。
HTTP協議是網際網路上應用最為廣泛的一種網絡協議,是一個客戶端和伺服器端請求和應答的標準(TCP),用於從WWW伺服器傳輸超文本到本地瀏覽器的傳輸協議。但是這種協議很明顯潛伏著非常大的危險:採用明文傳輸信息的過程中,假如有不法分子想嗅探機密,只需要劫持HTTP協議中的某段對話,對信息進行竊聽或篡改。
為了保護信息安全,後來在HTTP的基礎上加入了SSL(Secure Socket Layer)/TLS(Transport Layer Security),也就是安全套接層/傳輸層安全。這層安全協議會為雙方對話連接前提供信息加密、身份驗證以及完整性校驗,目的是為了保障服務端與客戶端之間連接的安全性。
小科普:
一、SSL
安全套接層(Secure Socket Layer,SSL)協議是網頁瀏覽器與網站伺服器之間安全交換信息的協議,提供兩個基本的安全服務:保密和鑑別。
SSL是Netscape於1994年開發的,後來成為了世界上最著名的web安全機制,所有主要的瀏覽器都支持SSL協議。
SSL協議具有三個特性:
1.鑑別:強制的伺服器端和認證可選的客戶端認證
2.保密:在握手協議中定義了會話密鑰後,所有的消息都被加密
3.完整性:傳送的消息包括消息完整性檢查(使用MAC)
二、TLS
SSL經歷了 SSL 1.0、2.0、3.0 版本後發展成了標準安全協議TLS(Transport Layer Security)傳輸層安全性協議。
到了1999年,SSL因為應用廣泛已經成為網際網路上的事實標準。IETF 在那年把SSL標準化,標準化之後的名稱改為TLS,很多相關的文章都把這兩者並列稱呼(SSL/TLS),因為這兩者可以視作同一個東西的不同階段。
TLS 在實現上分為記錄層與握手層兩層,其中握手層又包含四個子協議: 握手協議 (handshake protocol)、更改加密規範協議 (change cipher spec protocol)、應用數據協議 (application data protocol) 和警告協議 (alert protocol)。
HTTPS原理
HTTPS協議的主要功能基本都依賴於SSL/TLS協議,而實現SSL/TLS基於三種算法:對稱加密、散列函數與非對稱加密,其利用對稱加密實現密鑰協商與身份驗證,對稱加密算法採用協商的密鑰對數據加密,基於散列函數驗證信息的完整性。
對稱加密:常見的有 AES-GCM、AES-CBC、3DES、DES等,相同的密鑰可以用於信息的加密和解密,擁有密鑰才能獲取信息,這樣能夠防止信息竊聽,一對一進行通信散列函數:常見的有 SHA1、MD5、SHA256,該類函數特點是對輸入非常敏感、函數單向不可逆、輸出長度固定,針對數據的任何修改都會改變散列函數的結果,用於防止信息篡改並驗證數據的完整性非對稱加密:即常見的 RSA 算法,還包括 ECC、DH 等算法,算法特點是,密鑰成對出現,一般稱為公鑰(公開)和私鑰(保密),公鑰加密的信息只能私鑰解開,私鑰加密的信息只能公鑰解開。因此掌握公鑰的不同客戶端之間不能互相解密信息,只能和掌握私鑰的伺服器進行加密通信,伺服器可以實現一對多的通信,客戶端也可以用來驗證掌握私鑰的伺服器身份TLS 基於客戶端使用非對稱加密與伺服器進行通信,實現身份驗證並協商對稱加密使用的密鑰,然後對稱加密算法採用協商密鑰對信息以及信息摘要進行加密通信,不同的節點之間採用的對稱密鑰不同,從而可以保證信息只能通信雙方獲取。
那麼問題來了,既然HTTPS較HTTP安全性收入高很多,那麼為什麼到現在還有網站使用的是HTTP?
CA機構是一個專門給各網站籤發數字證書、從而保障瀏覽器可以安全獲得各個網站的公鑰。
在網站管理員向CA提交申請後,CA使用管理員提交的公鑰加上一系列其他信息(如網站域名、有效時長等),來製作證書;證書製作完成後,CA會使用自己的私鑰對其加密,並將加密後的數據反饋給網站管理員,管理員只需要將獲得的加密數據配置到網站伺服器上即可。
每當有瀏覽器請求我們的網站時,首先會將這段加密數據返回給瀏覽器,此時瀏覽器會用CA的公鑰來對這段數據解密,假如能夠解密成功,就可以獲得CA為網站頒發的證書了,包括網站公鑰:
如果無法解密成功就說明此段加密數據並不是由合法CA機構使用私鑰加密而來的,有可能是被篡改了,從而會在瀏覽器上顯示界面異常:
但由於每家CA機構都會給成千上萬的網站製作證書,假如黑客知道目標網站使用的是某家CA機構的證書,那他可以去這家機構申請一個合法證書,然後在瀏覽器請求目標對象網站時對返回的加密證書數據進行替換。
黑客申請的證書也是由正規CA機構製作的,因此這段數據當然可以成功被解密,也正是因為這個原因,所有CA機構在製作證書時除了網站公鑰外還要包含許多其他數據用來輔助校驗,比如域名就是其中一項重要的數據。