1. 前言
在上一章節(jié)中我們介紹了 HTTP 協(xié)議相關(guān)的面試題目,作為 HTTP 協(xié)議的擴(kuò)展,HTTPS 協(xié)議也經(jīng)常被面試官提起。
因?yàn)閷?duì)于大部分的前端、后端開發(fā)者,都接觸不到 HTTPS 協(xié)議的開發(fā)場(chǎng)景,因?yàn)槲覀兺魂P(guān)注請(qǐng)求路徑后綴,例如關(guān)注 URL: /get/username
,而非路徑全稱 https://coding.imooc.com/get/username
,所以考察 HTTPS 協(xié)議也是對(duì)候選人的知識(shí)深度的考驗(yàn)。
2.1 HTTP 和 HTTPS 協(xié)議
** 面試官提問:** 為什么有了 HTTP 協(xié)議后還出現(xiàn)了 HTTPS 協(xié)議?HTTPS 協(xié)議解決了什么問題?
題目解析:
在研究 HTTPS 協(xié)議之前,我們先總結(jié)下 HTTP 協(xié)議的優(yōu)點(diǎn)和缺點(diǎn):
優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|
通信方式簡(jiǎn)單:基于請(qǐng)求和響應(yīng),客戶端發(fā)起請(qǐng)求,服務(wù)器端返回響應(yīng) | 明文通信:信息明文傳輸,安全性低。 |
無(wú)需維護(hù)狀態(tài):HTTP 是無(wú)狀態(tài)協(xié)議,不識(shí)別客戶端。 | 沒有狀態(tài):例如對(duì)于需要保持登錄狀態(tài)的網(wǎng)站,需要依靠其他外部方式(Cookie、Session)維護(hù)狀態(tài)。 |
速度快,效率高。 |
如上表所示,HTTP 協(xié)議犧牲了安全性,換來(lái)了效率,但是在某些安全性要求高的場(chǎng)景,使用 HTTP 協(xié)議是不合適的。
HTTP 協(xié)議的全稱是 Hypertext Transfer Protocol,HTTPS 協(xié)議的全程是 Hypertext Transfer Protocol Secure,多了一個(gè) Secure(安全)的限制詞。從協(xié)議上看,HTTPS 協(xié)議基于 HTTP 協(xié)議,使用 SSL/TLS 協(xié)議對(duì)傳輸內(nèi)容進(jìn)行加密,從公式上定義:HTTP + SSL(TLS) = HTTPS
。
HTTPS 協(xié)議將 HTTP 協(xié)議的通信部分由 SSL 或者 TLS 協(xié)議替代,網(wǎng)絡(luò)模型劃分如下:
?
除了 SSL 協(xié)議以外,HTTPS 協(xié)議還涉及幾個(gè)重要的概念:CA 證書、混淆加密方式,以及 HTTPS 協(xié)議具體的工作流程,下面我們拆分解釋。
2.2 對(duì)稱加密和非對(duì)稱加密算法
** 面試官提問:** 既然 HTTPS 協(xié)議對(duì)通信內(nèi)容進(jìn)行了加密,那么涉及到了什么加密算法?
題目解析:
HTTPS 協(xié)議的核心是加密流程,首先我們需要區(qū)分三種加密方式:對(duì)稱加密、非對(duì)稱加密以及混淆加密。
(1)對(duì)稱加密:加密方和解密方都使用了相同的密鑰,只要保證密鑰不會(huì)泄露給第三方, 整個(gè)通信過程就是安全的。
?
因?yàn)閷?duì)稱加密算法整個(gè)過程共享同一個(gè)密鑰,所以使用特點(diǎn)也比較明顯。
優(yōu)點(diǎn):算法簡(jiǎn)單,加密速度快;
缺點(diǎn):安全性低,如果密鑰泄露,密文也被中間人攔截,那么信息很容易就會(huì)被破解。
在企業(yè)生產(chǎn)環(huán)境下,常用的對(duì)稱加密算法有 AES 算法。
(2)非對(duì)稱加密:在安全性要求更高的場(chǎng)景下,我們需要使用非對(duì)稱加密,關(guān)于非對(duì)稱加密算法的流程如下:
首先定義兩種密鑰:一種是公鑰(Public Key),給任何需要和接收方通信的客戶端保存;另一種是私鑰(Private Key),只給接收方自己保存。
對(duì)于要發(fā)送的原文文本,發(fā)送方通過接收方的公鑰對(duì)內(nèi)容加密,加密后的內(nèi)容只有接收方的私鑰可以解密。在整個(gè)傳輸過程中,如果發(fā)送方的公鑰泄露,加密內(nèi)容也被竊取,也不會(huì)導(dǎo)致傳輸內(nèi)容被破解(只要接收方的私鑰沒有泄露)。
常見的非對(duì)稱加密算法有 RSA 算法(即一種支持變長(zhǎng)密鑰的公共密鑰算法)。
另外,面試官可能會(huì)提出 MD5 算法的劃分,MD5 是非常常見的加密算法,例如在保存用戶密碼時(shí)經(jīng)常被使用。但是要區(qū)分的是,MD5 算法不是對(duì)稱和非對(duì)稱算法,MD5 算法不可逆,主要目的是為了文件校驗(yàn)(例如判斷文件是否在傳輸過程中損壞),或者數(shù)字簽名等途徑。
3. 小結(jié)
本小節(jié)主要給大家簡(jiǎn)單說明了 HTTPS 協(xié)議和傳統(tǒng) HTTP 協(xié)議的區(qū)別,另外給出了對(duì)稱加密和非對(duì)稱加密算法的流程,我們需要掌握不同加密算法的特點(diǎn),在下一章節(jié)中會(huì)給大家介紹 HTTPS 協(xié)議的具體流程。