基礎(chǔ)科普!大白話詳解HTTPS
來源:湖北國菱計算機科技有限公司-荊州網(wǎng)站建設(shè)-荊州軟件開發(fā)-政府網(wǎng)站建設(shè)公司
時間:2020-07-16
相信大家面試的時候?qū)τ?HTTPS 這個問題一定不會陌生,可能你只能簡單的說一下與 HTTP 的區(qū)別,但是真正的原理是否很清楚呢?他到底如何安全?這一篇讓我們用大白話來揭開 HTTPS 的神秘面紗吧!
HTTPS 是什么?
HTTPS 是什么?答:HTTPS 不就是 HTTP 后面多加了一個 S 嗎?
對這里的 S 就是指 SSL/TLS(就是一種安全加密協(xié)議,想深入了解的同學(xué)可以自行百度),HTTPS 是在 HTTP 的基礎(chǔ)上,利用 SSL/TLS 加密數(shù)據(jù)包。
我們記住兩個主要目的就行:
對數(shù)據(jù)加密
驗證網(wǎng)站服務(wù)器身份
HTTPS 怎么對數(shù)據(jù)進行加密:
我們已經(jīng)知道 HTTPS 第一個目的是給數(shù)據(jù)加密,對于數(shù)據(jù)加密,我們這里要談到兩種加密方式:
對稱加密:所謂對稱就是指兩邊一樣 發(fā)送方和接收方都用的同一個密鑰,加密解密都是同一個密鑰從始至終只需要保存一個密鑰就行。
非對稱加密:發(fā)送方和接收方使用一對密鑰,即公鑰和私鑰。一般私鑰是保密不能被泄露的,公鑰可以對外傳播。我們可以用公鑰加密私鑰解密(數(shù)據(jù)加密) 也可用私鑰加密公鑰解密
混合加密:知道了兩種加密方式的優(yōu)缺點之后,我們的 HTTPS 就很厲害了,它采用兩者混合的加密方式。
不是說對稱加密的密鑰不安全嗎?那我們換一種思路,我們在傳遞過程把我們的對稱加密中的密鑰用非對稱加密的方式去傳遞就好了。
這句話有點繞,我們看上圖:
客戶端生成會話秘鑰就是我們對稱加密生成的密鑰。
它用公鑰加密之后進行傳遞(這個時候被加密的不是數(shù)據(jù) 是這個會話秘鑰 等于把鑰匙加密了) 這里的公鑰就是非對稱加密中的公鑰 他是由服務(wù)器傳遞過去的(對外公開)。
服務(wù)端用非對稱加密的私鑰去解密 拿到我們的會話秘鑰。
客戶端和服務(wù)端都能用同一個會話秘鑰進行加解密了。
就算傳輸過程被攻擊者截取到了被加密的會話秘鑰 他沒有服務(wù)器的私鑰是無法得到會話秘鑰的。
整個過程巧妙之處就在于之前我們傳遞的是鑰匙,現(xiàn)在我們傳遞的是保險箱,鑰匙在保險箱里面,你就算拿到了保險箱,沒有保險箱的鑰匙也拿不到鑰匙。
HTTPS 怎么驗證網(wǎng)站服務(wù)器身份
HTTPS 第二個目的是對網(wǎng)站服務(wù)器進行真實身份認(rèn)證,那么這一點又是怎么做到的呢?
先來看一個問題,上一步我們已經(jīng)解決了數(shù)據(jù)加密的問題,雖然攻擊者無法解密數(shù)據(jù),但是他可以篡改數(shù)據(jù),我們怎么知道數(shù)據(jù)沒被動過呢?
數(shù)據(jù)被篡改怎么辦?
這個時候就要使用數(shù)字簽名了,數(shù)字簽名:將原文(部分?jǐn)?shù)據(jù)關(guān)鍵信息)先用 Hash 函數(shù)生成消息摘要,然后用發(fā)送者的私鑰加密生成數(shù)字簽名,與原文一起傳送給接收者。
兩個關(guān)鍵點:
Hash 算法計算生成信息摘要
私鑰加密生成數(shù)字簽名
客戶端如何校驗數(shù)字簽名呢?(利用服務(wù)器私鑰加密,公鑰解密)客戶端收到服務(wù)器發(fā)過來的數(shù)字簽名之后:
用服務(wù)端的公鑰去解密數(shù)字簽名得到消息摘要 (原始未被篡改的)
用 Hash 函數(shù)對收到的原文計算生成一個摘要信息 (可能會被篡改的)
如果兩個信息摘要一致,說明數(shù)據(jù)沒有被篡改。OK,到這里可能你覺得沒問題了!
其實最后還有一個很關(guān)鍵的點是:我們剛剛所有的假設(shè)都基于客戶端的公鑰是服務(wù)器傳遞過來的,那如果攻擊者偽造了服務(wù)器的公鑰怎么辦呢?
服務(wù)器公鑰被篡改怎么辦?
這個時候就要使用數(shù)字證書了,數(shù)字證書認(rèn)證機構(gòu)(CA)處于客戶端與服務(wù)器雙方都可信賴的第三方機構(gòu)的立場上。
服務(wù)端向 CA 申請數(shù)字證書,審核通過后 CA 會向申請者簽發(fā)認(rèn)證文件-證書,包含以下內(nèi)容:
拿到數(shù)字證書后,服務(wù)器傳遞數(shù)字證書給客戶端。
客戶端怎么校驗數(shù)字證書:
步驟如下:
首先瀏覽器讀取證書中的證書所有者、有效期等信息進行一一校驗。
瀏覽器開始查找操作系統(tǒng)中已內(nèi)置的受信任的證書發(fā)布機構(gòu) CA,與服務(wù)器發(fā)來的證書中的頒發(fā)者 CA 比對,用于校驗證書是否為合法機構(gòu)頒發(fā)。
如果找不到,瀏覽器就會報錯,說明服務(wù)器發(fā)來的證書是不可信任的。如果找到,那么瀏覽器就會從操作系統(tǒng)中取出頒發(fā)者 CA 的公鑰,然后對服務(wù)器發(fā)來的證書里面的簽名進行解密。
瀏覽器使用相同的 Hash 算法根據(jù)證書內(nèi)容計算出信息摘要,將這個計算的值與證書解密的值做對比。
對比結(jié)果一致,則證明服務(wù)器發(fā)來的證書合法,沒有被冒充。此時瀏覽器就可以讀取證書中的公鑰,用于后續(xù)加密了。
HTTPS 原理一覽圖如下: