面試官讓我白話一下HTTPS,用一句話就說清楚了
1.從加密算法說起
非對稱加密:
簡單說一句話:公鑰加密的密文只能用私鑰解密,私鑰加密的密文只能用公鑰解密。
私鑰可以生成公鑰,但是公鑰幾乎無法反推出公鑰。

舉個例子:
任意想一個3位數(shù),并把這個數(shù)和91相乘,然后告訴我積的最后三位數(shù),我就可以猜出對方想的是什么數(shù)字!
比如123,計算出123 * 91等于11193,并把結(jié)果的末三位193告訴我。
這時候我只需要把對應(yīng)的結(jié)果再乘以11,乘積的末三位就是剛開始想的數(shù)了。可以驗(yàn)證一下,193 * 11 = 2123 =》 123
原理非常簡單,91乘以11等于1001,而任何一個三位數(shù)乘以1001后,末三位都不變。(當(dāng)然隨便你用2001、3001 只要你可以因式分解開)
根據(jù)這個原理,我們可以構(gòu)造一個加密數(shù)值更大的加密解密系統(tǒng)。比方說,任意一個數(shù)乘以10000000001后,后10位都不會變,然后用計算機(jī)對10000000001進(jìn)行因式分解,一個十位不對稱加密系統(tǒng)就構(gòu)造好了。
對稱加密
加密、解密使用的相同的密鑰,常見對稱加密DES、AES等
小結(jié)
對稱加密相比非對稱加密算法來說,加解密的效率要高得多、加密速度快。但是缺陷在于對于密鑰的管理和分發(fā)上比較困難,不是非常安全,密鑰容易被丟失或者竊取。相對來說非對稱加密只公開公鑰,自己保管私鑰會更加安全。
2.HTTPS原理
HTTP協(xié)議的缺點(diǎn)
- 明文通信-內(nèi)容會被監(jiān)聽
- 不驗(yàn)證通信方身份-可能會遭遇偽裝
- 不驗(yàn)證內(nèi)容的完整性-內(nèi)容被篡改
HTTPS 簡介
HTTPS 協(xié)議(HyperText Transfer Protocol over Seure Socket Layer)可以理解為 HTTPS = HTTP + SSL/TLS,通過SSL/TLS來增加HTTP的安全性。

SSL(TLS)
SSL(Secure Socket Layer,安全套接字層):1994年為 Netscape 所研發(fā),SSL 協(xié)議位于 TCP/IP 協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。
TLS(Transport Layer Security,傳輸層安全):其前身是 SSL,它最初的幾個版本(SSL 1.0、SSL 2.0、SSL 3.0)由網(wǎng)景公司開發(fā),1999年從 3.1 開始被 IETF 標(biāo)準(zhǔn)化并改名,發(fā)展至今已經(jīng)有 TLS 1.0、TLS 1.1、TLS 1.2 三個版本。SSL3.0和TLS1.0由于存在安全漏洞,已經(jīng)很少被使用到。TLS 1.3 改動會比較大,目前還在草案階段,目前使用最廣泛的是TLS 1.1、TLS 1.2。
證書
為什么需要第三方頒發(fā)證書?
服務(wù)端向客戶端發(fā)送的公鑰依舊會被劫持,傳輸內(nèi)容依舊會被解密。劫持者可以用自己的私鑰生成一把新的公鑰,修改內(nèi)容后用自己的私鑰進(jìn)行加密,再把修改后的內(nèi)容以及自己生成的公鑰發(fā)送給客戶端。所以需要引入第三方機(jī)構(gòu)頒發(fā)證書。

3.一次完整的HTTPS通信
一句話概括
通過數(shù)字證書和非對稱加密建立SSL連接,生成并傳遞對稱加密所使用的的密鑰。后續(xù)的HTTP通信就使用對稱加密來保護(hù)內(nèi)容。保證安全的同時也提高了效率。
- 客戶端第一次向服務(wù)端進(jìn)行請求建立SSL連接。
- 服務(wù)端返回CA頒發(fā)的數(shù)字證書,其中也包含了非對稱加密的密鑰。
- 與服務(wù)端建立連接以后,客戶端會發(fā)送一個隨機(jī)密碼串稱為Pre-master secret(用公鑰加密) - 此時該密碼串只有服務(wù)端可以解密
- 服務(wù)端通過私鑰解密出Pre-master secret,并通過一定算法計算出對稱加密(一般是AES算法)的密鑰master (客戶端也會用同樣的算法計算這個master)
- SSL連接建立成功,進(jìn)行HTTP通信,并使用AES 對稱算法對內(nèi)容進(jìn)行加解密。

4.HTTPS一定安全嗎
HTTPS 的數(shù)據(jù)是加密的,常規(guī)下抓包工具代理請求后抓到的包內(nèi)容是加密狀態(tài),無法直接查看。
但是,只要客戶端授權(quán)的情況下,便可以組建中間人網(wǎng)絡(luò),而抓包工具便是作為中間人的代理。
通常 HTTPS 抓包工具(Charles)的使用方法是會生成一個證書,用戶需要手動把證書安裝到客戶端中,然后終端發(fā)起的所有請求通過該證書完成與抓包工具的交互,然后抓包工具再轉(zhuǎn)發(fā)請求到服務(wù)器,最后把服務(wù)器返回的結(jié)果在控制臺輸出后再返回給終端,從而完成整個請求的閉環(huán)。
HTTPS 可以防止用戶在不知情的情況下通信鏈路被監(jiān)聽,對于主動授信的抓包操作是不提供防護(hù)的,因?yàn)檫@個場景用戶是已經(jīng)對風(fēng)險知情。要防止被抓包,需要采用應(yīng)用級的安全防護(hù),例如采用私有的對稱加密,同時做好移動端的防反編譯加固,防止本地算法被破解。