一文弄懂HTTPS加密原理

前端晉級攻城獅發表於2019-06-18

1> 加密演算法一般分為兩種: '對稱加密' 和 '非對稱加密'。

2> '對稱加密': 也叫'金鑰加密',就是指加密和解密使用的是相同的金鑰。

3> '非對稱加密': 也叫'公鑰加密',就是指加密和解密使用的是不同的金鑰。

HTTPS :HTTP 通訊介面部分用 SSL (安全套接字層)和TLS (安全傳輸層協議)代替而已。即新增了加密及認證機制的 HTTP 稱為 HTTPS ( HTTP Secure ) HTTP + 加密 + 認證 + 完整性保護 = HTTPS

使用兩把金鑰的公開金鑰加密

公開金鑰加密使用一對非對稱的金鑰。一把叫做私鑰,另一把叫做公鑰。私鑰不能讓其他任何人知道,而公鑰則可以隨意釋出,任何人都可以獲得。使用公鑰加密方式,傳送密文的一方使用對方的公鑰進行加密處理,對方收到被加密的資訊後,再使用自己的私鑰進行解密。利用這種方式,不需要傳送用來解密的私鑰,也不必擔心金鑰被攻擊者竊聽而盜走。

過程 ①伺服器把自己的公鑰登入至數字證書認證機構。 ②數字證書機構把自己的私有金鑰向伺服器的公開密碼部署數字簽名並頒發公鑰證書。 ③客戶端拿到伺服器的公鑰證書後,使用數字證書認證機構的公開金鑰,向數字證書認證機構驗證公鑰證書上的數字簽名。以確認伺服器公鑰的真實性。 ④使用伺服器的公開金鑰對報文加密後傳送。 ⑤伺服器用私有金鑰對報文解密。

HTTPS通訊的步驟 ①客戶端傳送報文進行SSL通訊。報文中包含客戶端支援的SSL的指定版本、加密元件列表(加密演算法及金鑰長度等)。 ②伺服器應答,並在應答報文中包含SSL版本以及加密元件。伺服器的加密元件內容是從接受到的客戶端加密元件內篩選出來的。 ③伺服器傳送報文,報文中包含公開金鑰證書。 ④伺服器傳送報文通知客戶端,最初階段SSL握手協商部分結束。 ⑤SSL第一次握手結束之後,客戶端傳送一個報文作為回應。報文中包含通訊加密中使用的一種被稱Pre-master secret的隨機密碼串。該密碼串已經使用伺服器的公鑰加密。 ⑥客戶端傳送報文,並提示伺服器,此後的報文通訊會採用Pre-master secret金鑰加密。 ⑦客戶端傳送Finished報文。該報文包含連線至今全部報文的整體校驗值。這次握手協商是否能夠完成成功,要以伺服器是否能夠正確解密該報文作為判定標準。 ⑧伺服器同樣傳送Change Cipher Spec報文。 ⑨伺服器同樣傳送Finished報文。 ⑩伺服器和客戶端的Finished報文交換完畢之後,SSL連線就算建立完成。 ⑪應用層協議通訊,即傳送HTTP響應。 ⑫最後由客戶端斷開連結。斷開連結時,傳送close_nofify報文。

一、什麼是HTTPS 在說HTTPS之前先說說什麼是HTTP,HTTP就是我們平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的資料都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全。為了保證這些隱私資料能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的資料進行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,之後IETF對SSL 3.0進行了升級,於是出現了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實際上我們現在的HTTPS都是用的TLS協議,但是由於SSL出現的時間比較早,並且依舊被現在瀏覽器所支援,因此SSL依然是HTTPS的代名詞,但無論是TLS還是SSL都是上個世紀的事情,SSL最後一個版本是3.0,今後TLS將會繼承SSL優良血統繼續為我們進行加密服務。目前TLS的版本是1.2,定義在RFC 5246中,暫時還沒有被廣泛的使用。 \n

二、HTTPS到底安全嗎? 這個答案是肯定的,很安全。谷歌公司已經行動起來要大力推廣HTTPS的使用,在未來幾周,谷歌將對全球所有本地域名都啟用HTTPS,使用者只要在搜尋前用Google帳號登入,之後所有的搜尋操作都將使用TLS協議加密, \n

三、HTTPS的工作原理 HTTPS在傳輸資料之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH演算法。握手過程的簡單描述如下: 1.瀏覽器將自己支援的一套加密規則傳送給網站。 2.網站從中選出一組加密演算法與HASH演算法,並將自己的身份資訊以證書的形式發回給瀏覽器。證書裡面包含了網站地址,加密公鑰,以及證書的頒發機構等資訊。 3.獲得網站證書之後瀏覽器要做以下工作:

a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄裡面會顯示一個小鎖頭,否則會給出證書不受信的提示。

b) 如果證書受信任,或者是使用者接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。

c) 使用約定好的HASH計算握手訊息,並使用生成的隨機數對訊息進行加密,最後將之前生成的所有資訊傳送給網站。 4.網站接收瀏覽器發來的資料之後要做以下的操作:

a) 使用自己的私鑰將資訊解密取出密碼,使用密碼解密瀏覽器發來的握手訊息,並驗證HASH是否與瀏覽器發來的一致。

b) 使用密碼加密一段握手訊息,傳送給瀏覽器。

5.瀏覽器解密並計算握手訊息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器生成的隨機密碼並利用對稱加密演算法進行加密。

這裡瀏覽器與網站互相傳送加密的握手訊息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH演算法如下:

非對稱加密演算法:RSA,DSA/DSS

對稱加密演算法:AES,RC4,3DES

HASH演算法:MD5,SHA1,SHA256

其中非對稱加密演算法用於在握手過程中加密生成的密碼,對稱加密演算法用於對真正傳輸的資料進行加密,而HASH演算法用於驗證資料的完整性。由於瀏覽器生成的密碼是整個資料加密的關鍵,因此在傳輸的時候使用了非對稱加密演算法對其加密。非對稱加密演算法會生成公鑰和私鑰,公鑰只能用於加密資料,因此可以隨意傳輸,而網站的私鑰用於對資料進行解密,所以網站都會非常小心的保管自己的私鑰,防止洩漏。

相關文章