推薦閱讀:備戰2020——iOS全新面試題總結
一、HTTPS和HTTP的區別
HTTPS協議 = HTTP協議 + SSL/TLS協議
SSL的全稱是Secure Sockets Layer,即安全套接層協議,是為網絡通信提供安全及數據完整性的一種安全協議。TLS的全稱是Transport Layer Security,即安全傳輸層協議。
即HTTPS是安全的HTTP。
二、HTTPS的連接建立流程
HTTPS為了兼顧安全與效率,同時使用了對稱加密和非對稱加密。在傳輸的過程中會涉及到三個密鑰:
服務器端的公鑰和私鑰,用來進行
非對稱加密
-
客戶端生成的隨機密鑰,用來進行
對稱加密
image
如上圖,HTTPS連接過程大致可分為八步:
1、客戶端訪問HTTPS連接。
客戶端會把安全協議版本號
、客戶端支持的加密算法列表、隨機數C
發給服務端。
2、服務端發送證書給客戶端
服務端接收密鑰算法配件后,會和自己支持的加密算法列表進行比對,如果不符合,則斷開連接。否則,服務端會在該算法列表中,選擇一種對稱算法(如AES)、一種公鑰算法(如具有特定秘鑰長度的RSA)和一種MAC算法發給客戶端。
服務器端有一個密鑰對,即公鑰
和私鑰
,是用來進行非對稱加密
使用的,服務器端保存著私鑰
,不能將其泄露,公鑰
可以發送給任何人。
在發送加密算法的同時還會把數字證書
和隨機數S
發送給客戶端
3、客戶端驗證server證書
會對server公鑰進行檢查,驗證其合法性,如果發現發現公鑰有問題,那么HTTPS傳輸就無法繼續。
4、客戶端組裝會話秘鑰
如果公鑰合格,那么客戶端會用服務器公鑰來生成一個前主秘鑰
(Pre-Master Secret,PMS),并通過該前主秘鑰
和隨機數C、S來組裝成會話秘鑰
5、客戶端將前主秘鑰加密發送給服務端
是通過服務端的公鑰來對前主秘鑰
進行非對稱加密
,發送給服務端
6、服務端通過私鑰解密得到前主秘鑰
服務端接收到加密信息后,用私鑰解密得到主秘鑰。
7、服務端組裝會話秘鑰
服務端通過前主秘鑰
和隨機數C、S來組裝會話秘鑰
。
至此,服務端和客戶端都已經知道了用于此次會話的主秘鑰。
8、數據傳輸
客戶端收到服務器發送來的密文,用客戶端密鑰對其進行對稱解密,得到服務器發送的數據。
同理,服務端收到客戶端發送來的密文,用服務端密鑰對其進行對稱解密,得到客戶端發送的數據。
總結:
會話秘鑰
= random S + random C + 前主秘鑰
-
HTTPS連接建立過程使用
非對稱加密
,而非對稱加密
是很耗時的一種加密方式 -
后續通信過程使用
對稱加密
,減少耗時所帶來的性能損耗 -
其中,
對稱加密
加密的是實際的數據,非對稱加密
加密的是對稱加密所需要的客戶端的密鑰。
三、對稱加密和非對稱加密
1、對稱加密
用同一套密鑰來進行加密解密。
對稱加密通常有 DES,IDEA,3DES 加密算法。
2、非對稱加密
用公鑰和私鑰來加解密的算法。
公鑰
(Public Key)與私鑰
(Private Key)是通過一種算法得到的一個密鑰對(即一個公鑰
和一個私鑰
),公鑰
是密鑰對中公開的部分,私鑰
則是非公開的部分,私鑰
通常是保存在本地。
用
公鑰
進行加密,就要用私鑰
進行解密;反之,用私鑰
加密,就要用公鑰
進行解密(數字簽名)。由于私鑰是保存在本地的,所以
非對稱加密
相對與對稱加密
是安全的。
但非對稱加密
比對稱加密
耗時(100倍以上),所以通常要結合對稱加密
來使用。
常見的非對稱加密算法有:RSA、ECC(移動設備用)、Diffie-Hellman、El Gamal、DSA(數字簽名用)
而為了確保客戶端能夠確認公鑰就是想要訪問的網站的公鑰,引入了數字證書的概念,由于證書存在一級一級的簽發過程,所以就出現了證書鏈,在證書鏈中的頂端的就是根CA。
關于數字證書: 數字證書詳解 - 簡書