Https原理及流程

2021-09-30 00:23:33 字數 2916 閱讀 1735

我們知道,http請求都是明文傳輸的,所謂的明文指的是沒有經過加密的資訊,如果http請求被黑客攔截,並且裡面含有銀行卡密碼等敏感資料的話,會非常危險。為了解決這個問題,netscape 公司制定了https協議,https可以將資料加密傳輸,也就是傳輸的是密文,即便黑客在傳輸過程中攔截到資料也無法破譯,這就保證了網路通訊的安全。

在正式講解https協議之前,我們首先要知道一些密碼學的知識。

明文: 明文指的是未被加密過的原始資料。

密文:明文被某種加密演算法加密之後,會變成密文,從而確保原始資料的安全。密文也可以被解密,得到原始的明文。

金鑰:金鑰是一種引數,它是在明文轉換為密文或將密文轉換為明文的演算法中輸入的引數。金鑰分為對稱金鑰與非對稱金鑰,分別應用在對稱加密和非對稱加密上。

對稱加密:對稱加密又叫做私鑰加密,即資訊的傳送方和接收方使用同乙個金鑰去加密和解密資料。對稱加密的特點是演算法公開、加密和解密速度快,適合於對大資料量進行加密,常見的對稱加密演算法有des、3des、tdea、blowfish、rc5和idea。

其加密過程如下:明文 + 加密演算法 + 私鑰 => 密文

解密過程如下:密文 + 解密演算法 + 私鑰 => 明文

對稱加密中用到的金鑰叫做私鑰,私鑰表示個人私有的金鑰,即該金鑰不能被洩露。

其加密過程中的私鑰與解密過程中用到的私鑰是同乙個金鑰,這也是稱加密之所以稱之為「對稱」的原因。由於對稱加密的演算法是公開的,所以一旦私鑰被洩露,那麼密文就很容易被破解,所以對稱加密的缺點是金鑰安全管理困難。

非對稱加密:非對稱加密也叫做公鑰加密。非對稱加密與對稱加密相比,其安全性更好。對稱加密的通訊雙方使用相同的金鑰,如果一方的金鑰遭洩露,那麼整個通訊就會被破解。而非對稱加密使用一對金鑰,即公鑰和私鑰,且二者成對出現。私鑰被自己儲存,不能對外洩露。公鑰指的是公共的金鑰,任何人都可以獲得該金鑰。用公鑰或私鑰中的任何乙個進行加密,用另乙個進行解密。

被公鑰加密過的密文只能被私鑰解密,過程如下:

明文 + 加密演算法 + 公鑰 => 密文, 密文 + 解密演算法 + 私鑰 => 明文

被私鑰加密過的密文只能被公鑰解密,過程如下:

明文 + 加密演算法 + 私鑰 => 密文, 密文 + 解密演算法 + 公鑰 => 明文

由於加密和解密使用了兩個不同的金鑰,這就是非對稱加密「非對稱」的原因。

非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少量資料進行加密。

在非對稱加密中使用的主要演算法有:rsa、elgamal、rabin、d-h、ecc(橢圓曲線加密演算法)等。

https協議 = http協議 + ssl/tls協議,在https資料傳輸的過程中,需要用ssl/tls對資料進行加密和解密,需要用http對加密後的資料進行傳輸,由此可以看出https是由http和ssl/tls一起合作完成的。

ssl的全稱是secure sockets layer,即安全套接層協議,是為網路通訊提供安全及資料完整性的一種安全協議。ssl協議在2023年被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為了兼顧安全與效率,同時使用了對稱加密和非對稱加密。資料是被對稱加密傳輸的,對稱加密過程需要客戶端的乙個金鑰,為了確保能把該金鑰安全傳輸到伺服器端,採用非對稱加密對該金鑰進行加密傳輸,總的來說,對資料進行對稱加密,對稱加密所要使用的金鑰通過非對稱加密傳輸。

以下來自於limboy的部落格

https在傳輸的過程中會涉及到三個金鑰:

伺服器端的公鑰和私鑰,用來進行非對稱加密

客戶端生成的隨機金鑰,用來進行對稱加密

乙個https請求實際上包含了兩次http傳輸,可以細分為8步。

1.客戶端向伺服器發起https請求,連線到伺服器的443埠

2.伺服器端有乙個金鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,伺服器端儲存著私鑰,不能將其洩露,公鑰可以傳送給任何人。

3.伺服器將自己的公鑰傳送給客戶端。

4.客戶端收到伺服器端的公鑰之後,會對公鑰進行檢查,驗證其合法性,如果發現發現公鑰有問題,那麼https傳輸就無法繼續。嚴格的說,這裡應該是驗證伺服器傳送的數字證書的合法性,關於客戶端如何驗證數字證書的合法性,下文會進行說明。如果公鑰合格,那麼客戶端會生成乙個隨機值,這個隨機值就是用於進行對稱加密的金鑰,我們將該金鑰稱之為client key,即客戶端金鑰,這樣在概念上和伺服器端的金鑰容易進行區分。然後用伺服器的公鑰對客戶端金鑰進行非對稱加密,這樣客戶端金鑰就變成密文了,至此,https中的第一次http請求結束。

5.客戶端會發起https中的第二個http請求,將加密之後的客戶端金鑰傳送給伺服器。

6.伺服器接收到客戶端發來的密文之後,會用自己的私鑰對其進行非對稱解密,解密之後的明文就是客戶端金鑰,然後用客戶端金鑰對資料進行對稱加密,這樣資料就變成了密文。

7.然後伺服器將加密後的密文傳送給客戶端。

8.客戶端收到伺服器傳送來的密文,用客戶端金鑰對其進行對稱解密,得到伺服器傳送的資料。這樣https中的第二個http請求結束,整個https傳輸完成。

Https原理及流程

我們知道,http請求都是明文傳輸的,所謂的明文指的是沒有經過加密的資訊,如果http請求被黑客攔截,並且裡面含有銀行卡密碼等敏感資料的話,會非常危險。為了解決這個問題,netscape 公司制定了https協議,https可以將資料加密傳輸,也就是傳輸的是密文,即便黑客在傳輸過程中攔截到資料也無法...

Https原理及流程

介紹 我們知道,http請求都是明文傳輸的,所謂的明文指的是沒有經過加密的資訊,如果http請求被攔截,並且裡面含有銀行卡密碼等敏感資料的話,會非常危險。為了解決這個問題,netscape 公司制定了https協議,https可以將資料加密傳輸,也就是傳輸的是密文,即便在傳輸過程中攔截到資料也無法破...

Https原理及流程

來自 leon hy 我們知道,http請求都是明文傳輸的,所謂的明文指的是沒有經過加密的資訊,如果http請求被黑客攔截,並且裡面含有銀行卡密碼等敏感資料的話,會非常危險。為了解決這個問題,netscape 公司制定了https協議,https可以將資料加密傳輸,也就是傳輸的是密文,即便黑客在傳輸...