
http預設采用80作為通訊端口,對于傳輸采用不加密的方式,https預設采用443,對于傳輸的資料進行加密傳輸。https協定具體的傳輸過程可以概括為以下過程……
1. 介紹一下HTTPS協定?
1.1 基本概念
http預設采用80作為通訊端口,對于傳輸采用不加密的方式,https預設采用443,對于傳輸的資料進行加密傳輸。
1.2 密碼學基礎
明文: 明文指的是未被加密過的原始資料。
密文:明文被某種加密算法加密之後,會變成密文,進而確定原始資料的安全。密文也可以被解密,得到原始的明文。
密鑰:密鑰是一種參數,它是在明文轉換為密文或将密文轉換為明文的算法中輸入的參數。密鑰分為對稱密鑰與非對稱密鑰,分别應用在對稱加密和非對稱加密上。
1.3 對稱加密
[!NOTE]
對稱加密又叫做私鑰加密,即資訊的發送方和接收方使用同一個密鑰去加密和解密資料。對稱加密的特點是算法公開、加密和解密速度快,适合于對大資料量進行加密,常見的對稱加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
其加密過程如下:明文 + 加密算法 + 私鑰 => 密文
解密過程如下:密文 + 解密算法 + 私鑰 => 明文
對稱加密中用到的密鑰叫做私鑰,私鑰表示個人私有的密鑰,即該密鑰不能被洩露。
其加密過程中的私鑰與解密過程中用到的私鑰是同一個密鑰,這也是稱加密之是以稱之為“對稱”的原因。由于對稱加密的算法是公開的,是以一旦私鑰被洩露,那麼密文就很容易被破解,是以對稱加密的缺點是密鑰安全管理困難。
1.4 非對稱加密
非對稱加密也叫做公鑰加密。非對稱加密與對稱加密相比,其安全性更好。對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭洩露,那麼整個通信就會被破解。而非對稱加密使用一對密鑰,即公鑰和私鑰,且二者成對出現。私鑰被自己儲存,不能對外洩露。公鑰指的是公共的密鑰,任何人都可以獲得該密鑰。用公鑰或私鑰中的任何一個進行加密,用另一個進行解密。
- 被公鑰加密過的密文隻能被私鑰解密,過程如下:
明文 + 加密算法 + 公鑰 => 密文, 密文 + 解密算法 + 私鑰 => 明文
- 被私鑰加密過的密文隻能被公鑰解密,過程如下:
明文 + 加密算法 + 私鑰 => 密文, 密文 + 解密算法 + 公鑰 => 明文
由于加密和解密使用了兩個不同的密鑰,這就是非對稱加密“非對稱”的原因。
非對稱加密的缺點是加密和解密花費時間長、速度慢,隻适合對少量資料進行加密。
在非對稱加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(橢圓曲線加密算法)等。
2. HTTPS通信過程(面試重點)
2.1 基本概念
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為了兼顧安全與效率,同時使用了對稱加密和非對稱加密。資料是被對稱加密傳輸的,對稱加密過程需要用戶端的一個密鑰,為了確定能把該密鑰安全傳輸到伺服器端,采用非對稱加密對該密鑰進行加密傳輸,總的來說,對資料進行對稱加密,對稱加密所要使用的密鑰通過非對稱加密傳輸。

2.2 傳輸秘鑰
HTTPS在傳輸的過程中會涉及到三個密鑰:
- 伺服器端的公鑰和私鑰,用來進行非對稱加密
- 用戶端生成的随機密鑰,用來進行對稱加密
2.3 傳輸細節(重點了解)
一個HTTPS請求實際上包含了兩次HTTP傳輸,可以細分為8步。
- 用戶端向伺服器發起HTTPS請求,連接配接到伺服器的443端口
- 伺服器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,伺服器端儲存着私鑰,不能将其洩露,公鑰可以發送給任何人。
- 伺服器将自己的公鑰發送給用戶端。
- 用戶端收到伺服器端的公鑰之後,會對公鑰進行檢查,驗證其合法性,如果發現發現公鑰有問題,那麼HTTPS傳輸就無法繼續。嚴格的說,這裡應該是驗證伺服器發送的數字證書的合法性。如果公鑰合格,那麼用戶端會生成一個随機值,這個随機值就是用于進行對稱加密的密鑰,我們将該密鑰稱之為client key,即用戶端密鑰,這樣在概念上和伺服器端的密鑰容易進行區分。然後用伺服器的公鑰對用戶端密鑰進行非對稱加密,這樣用戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請求結束。
- 用戶端會發起HTTPS中的第二個HTTP請求,将加密之後的用戶端密鑰發送給伺服器。
- 伺服器接收到用戶端發來的密文之後,會用自己的私鑰對其進行非對稱解密,解密之後的明文就是用戶端密鑰,然後用用戶端密鑰對資料進行對稱加密,這樣資料就變成了密文。
- 然後伺服器将加密後的密文發送給用戶端。
- 用戶端收到伺服器發送來的密文,用用戶端密鑰對其進行對稱解密,得到伺服器發送的資料。這樣HTTPS中的第二個HTTP請求結束,整個HTTPS傳輸完成。
參考部落格:https://www.jianshu.com/p/14cd2c9d2cd2