當(dāng)我們?yōu)g覽網(wǎng)頁時,網(wǎng)頁內(nèi)容通過 HTTP 協(xié)議進行傳輸,HTTP 協(xié)議是明文的,很容易被竊聽和篡改。如果黑客截取了瀏覽器和網(wǎng)站服務(wù)器之間的信息,就可以直接讀取利用,因此 HTTP 協(xié)議不適合傳輸諸如信用卡、密碼之類的敏感信息。
如果你訪問的網(wǎng)站網(wǎng)址是 HTTPS 開頭,則意味著瀏覽器和服務(wù)器之間的通信進行了加密,敏感信息無法被監(jiān)聽和篡改。具體是如何做的呢?
1. 背景知識:什么是非對稱加密?
密鑰是指在明文轉(zhuǎn)換為密文或?qū)⒚芪霓D(zhuǎn)換為明文的算法中輸入的參數(shù),暫且可以簡單理解為密碼。在對稱加密中,同一個密鑰可以同時用作信息的加密和解密。
在非對稱加密中,分成公開密鑰和私有密鑰,公開密鑰是公開的,可以發(fā)布在網(wǎng)絡(luò)上,私有密鑰只有持有人自己擁有。如果用公開密鑰對數(shù)據(jù)進行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進行加密,那么只有用對應(yīng)的公開密鑰才能解密。
小明需要給小紅發(fā)送一封機密郵件,可以用小紅的公鑰對郵件進行加密,即使郵件被黑客竊取,黑客也無法解密,小紅收到郵件時后使用自己的私鑰解密,即可查看到郵件內(nèi)容。
小紅給小明回信,使用自己的私鑰進行加密,小明收到信件后,使用小紅的公鑰進行解密,如果可以解開郵件,則可以確信這封郵件是小紅發(fā)出的,而不是其他人發(fā)出的,因為只有小紅擁有的私鑰可以對其進行加密。不過這個過程中如果郵件被黑客竊取,黑客也可以用小紅的公鑰進行解密,從而讀取到郵件內(nèi)容。
從以上的例子可以看出,公鑰加密傳輸可以防止信息竊取,私鑰加密可以用作身份認證。
2. 背景知識:什么是數(shù)字簽名?
私鑰加密用作身份認證時,并不是直接將信息進行加密,這樣做計算效率太低,而是對信息本身使用Hash 函數(shù)生成摘要(比如直接 md5),然后使用私鑰對這段摘要進行加密,加密后的值我們稱之為數(shù)字簽名(signature),再將它附加在文件末尾。

收到文件時,接收者計算該文件的摘要,同時使用發(fā)送者的公鑰對數(shù)字簽名進行解密,如果解密后的值和文件摘要能夠匹配上,則表明該文件確實為作者發(fā)送,沒有被篡改過。
但是更復(fù)雜的情況出現(xiàn)了:小剛偷偷使用小明的電腦,將小明電腦中小紅的公鑰替換成自己的公鑰,然后小剛就可以假冒成小紅給小剛發(fā)郵件了。由于班上有 50 個同學(xué),不同成員的公鑰的管理也成了問題。
大家想了個辦法,找老師專門成立一個"證書中心"(certificate authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對每個人的公鑰和一些實名信息一起加密,生成"數(shù)字證書",發(fā)送信息時,只需要附上數(shù)字簽名和數(shù)字證書就可以了,收到郵件后,使用 CA 的公鑰解開數(shù)字證書,得到發(fā)送者的公鑰,然后用發(fā)送者的公鑰驗證數(shù)字簽名,這樣,全班每個人電腦里,只需存儲 CA 的一個公鑰即可。
3. HTTPS 的加密解密過程
HTTPS 協(xié)議,就用到了上面提到的非對稱加密,需要具體流程如下:
客戶端向服務(wù)器發(fā)出 HTTPS 請求,比如用戶訪問
https://www.baidu.com/服務(wù)器用自己的私鑰加密網(wǎng)頁以后,連同本身的數(shù)字證書,一起發(fā)送給客戶端
-
瀏覽器的“證書管理器”中有一個“受信任的證書機構(gòu)”列表。瀏覽器會根據(jù)這張列表,查看解開數(shù)字證書的公鑰是否在列表之內(nèi)。
Firefox 的證書機構(gòu)列表 -
如果數(shù)字證書是可靠的,瀏覽器就可以解密后得到證書中的服務(wù)器公鑰,對信息進行加密,然后與服務(wù)器交換加密信息。用戶的銀行卡號、敏感信息即使在傳輸過程中被竊取,黑客也無法解密,如果這張數(shù)字證書不是由受信任的機構(gòu)頒發(fā)的,瀏覽器會發(fā)出警告,
瀏覽器警告
使用 HTTPS 加密,除了能保障信息安全傳輸以外,還可以防止運營商的惡意注入,我們??吹揭恍┍緛頉]有廣告的位置上突然有了廣告,或者,你正愉快地刷著微博,突然彈出運營商的通知:

這是運營商劫持了你訪問的頁面后進行篡改的結(jié)果,如果網(wǎng)站使用了 HTTPS,運營商就不會得逞。
如果你訪問網(wǎng)銀、支付寶、理財?shù)壬婕暗截敭a(chǎn)安全的網(wǎng)站時,一定要留意瀏覽器上的網(wǎng)址是否是 HTTPS 開頭,如果不是,則一定要小心,極有可能是釣魚網(wǎng)站。

