咱們知道使用HTTP協議進行服務端與客戶端通訊時,信息是經過明文傳輸的。這期間信息就有可能被攔截或者篡改,爲了解決這種場景,HTTPS就出現了。算法
相對於HTTP來講,HTTPS有以下做用。瀏覽器
接下來就學一下HTTPS的工做原理。安全
HTTPS是目前使用最多的HTTP安全形式。在使用HTTPS時,全部的HTTP請求和響應數據在發送到網絡以前,都會進行加密。服務器
上圖展現了HTTP與HTTPS在網絡協議中的表現,能夠看到在應用層中HTTPS=HTTP + SSL/TLS。網絡
SSL和TSL是一種安全協議。其中SSL是早起採用的安全協議,後來TSL是在SSL的基礎上進一步標準化了SSL協議。在上面的圖中能夠看到,SSL和TSL位於傳輸層之上,在數據到達傳輸層以前都會通過SSL/TSL協議層處理,由SSL/TSL保證數據的機密性和完整性。函數
SSL/TSL安全協議保證數據安全的技術基礎就是密碼學。接下來,咱們先了解一些跟HTTPS有關的密碼學知識。網站
密碼是一種編碼方案的算法,也就是使用一種編碼方式編碼數據,而後使用相應的解碼方式解碼數據的算法。google
密鑰是編碼的參數。編碼
經過密碼+密鑰就能夠實現加密數據。加密
對稱加密就是編碼和解碼使用同一個密鑰的加密技術。
在對稱加密中,發送端和接收端使用相同的密鑰進行通訊。發送端使用共享的密鑰發送報文,而後將密文發送到接收端。接收端使用相同密鑰解密密文,恢復原始數據。
非對稱加密也成爲公開密鑰加密技術,就是使用不一樣密鑰進行通訊的加密技術。
非對稱加密技術使用了不一樣的密鑰進行通訊,在發送端使用公鑰對報文進行加密(公鑰就是所用人均可以獲取到的密鑰),而後在接收端使用私鑰對加密的密文進行解密。常見的非對稱加密技術是RSA技術。
數字簽名是附加在報文上的特殊加密校驗碼。數字簽名能夠防止報文被篡改,若是有惡意攻擊在傳輸過程在篡改了報文,那麼校驗的時候校驗和就再也不匹配,所以能夠確認報文被篡改了。
數字簽名的加解密過程:
數字證書是由權威機構給某網站頒發的一種承認憑證。它主要包含一些認證信息,好比:對象的名稱(服務器、組織、我的等)、過時時間、證書頒發者、來自證書發佈者的數字簽名。
上面的圖片就是www.google.com的證書。
咱們能夠看到在上面講到數字簽名的時候,彷佛就能夠保證報文的安全了。爲何還須要數字證書呢?這個設想一下這個場景:好比某人A把發送到瀏覽器的公有密鑰進行了替換,同時A在給瀏覽器發送報文時使用本身的私有密鑰對報文進行數字簽名,那麼瀏覽器就不能確認報文是否來自於真實服務器。這個時候就可使用數字證書進行驗證,由於數字證書中保存了真實服務器的信息。
在TCP鏈接創建完成之後,在HTTPS協議中,客戶端和服務端會初始化SSL層,也就是安全層。
在發送報文以前,客戶端和服務端會進行一次SSL握手,在這個過程當中主要完成如下工做:
在SSL會進行不少工做,處理交換一些必要的信息以外,還會對身份進行認證。
這裏的認證是經過數字證書進行的,在客戶端獲取證書後,會採用相應的算法對服務端的身份信息進行驗證:
身份認證完成後,客戶端與服務端進行密碼協商,肯定本次鏈接採用哪一種加密算法進行通訊。
SSL握手完成後,就完成創建了HTTPS通道,客戶端與服務端就會根據協商的加密算法進行通訊。
整個HTTPS的工做流程能夠總結以下:
相較於HTTP協議,HTTPS確保了報文的機密性以及完整性。HTTPS確保這些的依賴就是SSL/TSL協議,SSL/TSL安全協議搭配數字證書保證了報文在傳輸過程當中的絕對安全。