咱們知道,HTTP請求都是明文傳輸的,所謂的明文指的是沒有通過加密的信息,若是HTTP請求被攔截,而且裏面含有銀行卡密碼等敏感數據的話,會很是危險。爲了解決這個問題,Netscape 公司制定了HTTPS協議,HTTPS能夠將數據加密傳輸,也就是傳輸的是密文,即使在傳輸過程當中攔截到數據也沒法破譯,這就保證了網絡通訊的安全。算法
在正式講解HTTPS協議以前,咱們首先要知道一些密碼學的知識。
DES
、3DES
、TDEA
、Blowfish
、RC5
和IDEA
。其加密過程以下: 瀏覽器
明文 + 加密算法 + 私鑰 => 密文安全
解密過程以下:服務器
密文 + 解密算法 + 私鑰 => 明文網絡
對稱加密中用到的密鑰叫作私鑰,私鑰表示我的私有的密鑰,即該密鑰不能被泄露。
其加密過程當中的私鑰與解密過程當中用到的私鑰是同一個密鑰,這也是稱加密之因此稱之爲「對稱」的緣由。因爲對稱加密的算法是公開的,因此一旦私鑰被泄露,那麼密文就很容易被破解,因此對稱加密的缺點是密鑰安全管理困難。ide
非對稱加密:非對稱加密也叫作公鑰加密。非對稱加密與對稱加密相比,其安全性更好。對稱加密的通訊雙方使用相同的密鑰,若是一方的密鑰遭泄露,那麼整個通訊就會被破解。而非對稱加密使用一對密鑰,即公鑰和私鑰,且兩者成對出現。私鑰被本身保存,不能對外泄露。公鑰指的是公共的密鑰,任何人均可以得到該密鑰。用公鑰或私鑰中的任何一個進行加密,用另外一個進行解密。大數據
被公鑰加密過的密文只能被私鑰解密,過程以下:加密
明文 + 加密算法 + 公鑰 => 密文, 密文 + 解密算法 + 私鑰 => 明文code
被私鑰加密過的密文只能被公鑰解密,過程以下:blog
明文 + 加密算法 + 私鑰 => 密文, 密文 + 解密算法 + 公鑰 => 明文
因爲加密和解密使用了兩個不一樣的密鑰,這就是非對稱加密「非對稱」的緣由。
非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少許數據進行加密。
在非對稱加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(橢圓曲線加密算法)等。
HTTPS協議 = HTTP協議 + SSL/TLS協議,在HTTPS數據傳輸的過程當中,須要用SSL/TLS對數據進行加密和解密,須要用HTTP對加密後的數據進行傳輸,由此能夠看出HTTPS是由HTTP和SSL/TLS一塊兒合做完成的。
SSL的全稱是Secure Sockets Layer,即安全套接層協議,是爲網絡通訊提供安全及數據完整性的一種安全協議。SSL協議在1994年被Netscape發明,後來各個瀏覽器均支持SSL,其最新的版本是3.0
TLS的全稱是Transport Layer Security,即安全傳輸層協議,最新版本的TLS(Transport Layer Security,傳輸層安全協議)是IETF(Internet Engineering Task Force,Internet工程任務組)制定的一種新的協議,它創建在SSL 3.0協議規範之上,是SSL 3.0的後續版本。在TLS與SSL3.0之間存在着顯著的差異,主要是它們所支持的加密算法不一樣,因此TLS與SSL3.0不能互操做。雖然TLS與SSL3.0在加密算法上不一樣,可是在咱們理解HTTPS的過程當中,咱們能夠把SSL和TLS看作是同一個協議。
HTTPS爲了兼顧安全與效率,同時使用了對稱加密和非對稱加密。數據是被對稱加密傳輸的,對稱加密過程須要客戶端的一個密鑰,爲了確保能把該密鑰安全傳輸到服務器端,採用非對稱加密對該密鑰進行加密傳輸,總的來講,對數據進行對稱加密,對稱加密所要使用的密鑰經過非對稱加密傳輸。
客戶端生成的隨機密鑰,用來進行對稱加密
一個HTTPS請求實際上包含了兩次HTTP傳輸,能夠細分爲8步,以下。
1.客戶端向服務器發起HTTPS請求,鏈接到服務器的443端口
2.服務器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,服務器端保存着私鑰,不能將其泄露,公鑰能夠發送給任何人。
3.服務器將本身的公鑰發送給客戶端。
4.客戶端收到服務器端的公鑰以後,會對公鑰進行檢查,驗證其合法性,若是發現發現公鑰有問題,那麼HTTPS傳輸就沒法繼續。嚴格的說,這裏應該是驗證服務器發送的數字證書的合法性,關於客戶端如何驗證數字證書的合法性,下文會進行說明。若是公鑰合格,那麼客戶端會生成一個隨機值,這個隨機值就是用於進行對稱加密的密鑰,咱們將該密鑰稱之爲client key,即客戶端密鑰,這樣在概念上和服務器端的密鑰容易進行區分。而後用服務器的公鑰對客戶端密鑰進行非對稱加密,這樣客戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請求結束。
5.客戶端會發起HTTPS中的第二個HTTP請求,將加密以後的客戶端密鑰發送給服務器。
6.服務器接收到客戶端發來的密文以後,會用本身的私鑰對其進行非對稱解密,解密以後的明文就是客戶端密鑰,而後用客戶端密鑰對數據進行對稱加密,這樣數據就變成了密文。
7.而後服務器將加密後的密文發送給客戶端。
8.客戶端收到服務器發送來的密文,用客戶端密鑰對其進行對稱解密,獲得服務器發送的數據。這樣HTTPS中的第二個HTTP請求結束,整個HTTPS傳輸完成。
做者:Leon_hy
連接:https://www.jianshu.com/p/14cd2c9d2cd2來源:簡書簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。