一、Http
在說HTTPS之前先說說什么是HTTP,HTTP就是我們平時瀏覽網(wǎng)頁時候使用的一種協(xié)議。HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文的,因此使 用HTTP協(xié)議傳輸隱私信息非常不安全。為了保證這些隱私數(shù)據(jù)能加密傳輸,于是網(wǎng)景公司設計了SSL(Secure Sockets Layer)協(xié)議用于對HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進行加密,從而就誕生了HTTPS
二、加密方式
在學習HTTPS加密方式之前,有必要了解幾種常見的加密方式,如:
-
對稱加密
src=http___www.wendangwang.com_pic_3b1693e8332cf07c2fd28e9d_1-155-png_6_0_0_135_343_506_174_892.979_1262.879-450-0-189-450.jpg&refer=http___www.wendangwang.jpeg
對加密和解密使用相同密鑰的加密算法。由于其速度,對稱性加密通常在消息發(fā)送方需要加密大量數(shù)據(jù)時使用。對稱性加密也稱為密鑰加密。對稱式數(shù)據(jù)加密的方式的工作原理如圖。所謂對稱,就是采用這種加密方法的雙方使用方式用同樣的密鑰進行加密和解密。密鑰實際上是一種算法,通信發(fā)送方使用這種算法加密數(shù)據(jù),接收方再以同樣的算法解密數(shù)據(jù)。因此對稱式加密本身不是安全的
-
非對稱加密
src=http___image.mamicode.com_info_202004_20200418140716652718.png&refer=http___image.mamicode.jpeg
非對稱加密算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數(shù)據(jù)進行加密,只有用對應的私鑰才能解密。如果用公鑰對數(shù)據(jù)進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
事實上,在沒有引入證書之前,非對稱加密也并非傳輸安全的。
在此舉個例子:
- 服務器以明文的方式給客戶端傳輸公鑰的時候,中間人截取了這把屬于服務器的公鑰,并且把中間人自己的公鑰冒充服務器的公鑰傳輸給了客戶端。
- 之后客戶端就會用中間人的公鑰來加密自己生成的密鑰。然后把被加密的密鑰傳輸給服務器,這個時候中間人又把密鑰給截取了,中間人用自己的私鑰對這把被加密的密鑰進行解密,解密后中間人就可以獲得這把密鑰了。
- 最后中間人再對這把密鑰用剛才服務器的公鑰進行加密,再發(fā)給服務器。
毫無疑問,在這個過程中,中間人獲取了對稱加密中的密鑰,在之后服務器和客戶端的對稱加密傳輸中,這些加密的數(shù)據(jù)對中間人來說,和明文沒啥區(qū)別。
非對稱性加密之所以不安全,是應為客戶端不知道,這把公鑰是不是服務器的。因此,我們需要找到一種策略來證明這把公鑰就是服務器的,而不是別人冒充的。解決這個問題的方式就是使用數(shù)字證書.
三、數(shù)字證書

- 數(shù)字證書就好比我們的身份證,我們需要找到一個第三方機構,它是一個擁有公信力、大家都認可的認證中心,那就是數(shù)字證書認證機構(簡稱CA)。
- 網(wǎng)站在使用HTTPS前,需要向CA機構申領一份數(shù)字證書,數(shù)字證書里含有證書持有者信息、公鑰信息等。服務器把證書傳輸給瀏覽器,瀏覽器從證書里獲取公鑰就行了,證書就如身份證,證明“該公鑰對應該網(wǎng)站”。而這里又有一個顯而易見的問題,“證書本身的傳輸過程中,如何防止被篡改”?即如何證明證書本身的真實性?身份證運用了一些防偽技術,而數(shù)字證書怎么防偽呢?解決這個問題我們就接近勝利了!
如何放防止數(shù)字證書被篡改?
我們把證書原本的內(nèi)容生成一份“簽名”,比對證書內(nèi)容和簽名是否一致就能判別是否被篡改。這就是數(shù)字證書的“防偽技術”,這里的“簽名”就叫數(shù)字簽名:
數(shù)字簽名的制作過程:
- CA機構擁有非對稱加密的私鑰和公鑰。
- CA機構對證書明文數(shù)據(jù)T進行hash。
- 對hash后的值用私鑰加密,得到數(shù)字簽名S。
明文和數(shù)字簽名共同組成了數(shù)字證書,這樣一份數(shù)字證書就可以頒發(fā)給網(wǎng)站了。
瀏覽器驗證過程:
- 拿到證書,得到明文T1,數(shù)字簽名S1。
- 用CA機構的公鑰對S1解密,得到S2。
-用證書里說明的hash算法對明文T1進行hash得到T2。
比較S2是否等于T2,等于則表明證書可信。
假設中間人篡改了證書的原文,由于他沒有CA機構的私鑰,所以無法得到此時加密后簽名,無法相應地篡改簽名。瀏覽器收到該證書后會發(fā)現(xiàn)原文和簽名解密后的值不一致,則說明證書已被篡改,證書不可信,從而終止向服務器傳輸信息,防止信息泄露給中間人。

四、總結:
HTTPS 先利用數(shù)字證書保證服務器端的公匙可安全無誤的到達客戶端;再用非對稱加密安全的傳遞共享密匙;最后用共享密匙安全的交換數(shù)據(jù)。
HTTPS 雖提供了消息安全傳輸?shù)耐ǖ?,但每次消息的加解密十分耗時,消耗系統(tǒng)資源。
因此除非在一些對安全性比較高的場景下,比如銀行系統(tǒng),購物系統(tǒng)中必須要使用HTTPS 進行通信,其他一些對安全性要求不高的場景,沒必要使用 HTTPS。
使用 HTTPS 需要使用到數(shù)字證書,但一般權威機構頒發(fā)的數(shù)字證書都是收費的,而且價格也是不菲的。
因此對于一些個人網(wǎng)站來講,若對安全性要求不高,沒必要使用 HTTPS

