做者:_Big shark@LX_
出處:https://juejin.im/post/5eb3c6...面試
我相信你們面試的時候對於 HTTPS 這個問題必定不會陌生,可能你只能簡單的說一下與 HTTP 的區別,可是真正的原理是否很清楚呢?他到底如何安全?這一篇讓咱們用大白話來揭開 HTTPS 的神祕面紗吧!算法
HTTPS 是什麼瀏覽器
HTTPS 是什麼?答:HTTPS 不就是 HTTP 後面多加了一個 S 嗎?安全
對這裏的 S 就是指 SSL/TLS(就是一種安全加密協議,想深刻了解的同窗能夠自行百度),HTTPS 是在 HTTP 的基礎上,利用 SSL/TLS 加密數據包。服務器
咱們記住兩個主要目的就行:函數
HTTPS 怎麼對數據進行加密post
咱們已經知道 HTTPS 第一個目的是給數據加密,對於數據加密,咱們這裏要談到兩種加密方式:網站
混合加密:知道了兩種加密方式的優缺點以後,咱們的 HTTPS 就很厲害了,它採用二者混合的加密方式。加密
不是說對稱加密的密鑰不安全嗎?那咱們換一種思路,咱們在傳遞過程把咱們的對稱加密中的密鑰用非對稱加密的方式去傳遞就行了。spa
這句話有點繞,咱們看上圖:
就算傳輸過程被攻擊者截取到了被加密的會話祕鑰 他沒有服務器的私鑰是沒法獲得會話祕鑰的。
整個過程巧妙之處就在於以前咱們傳遞的是鑰匙,如今咱們傳遞的是保險箱,鑰匙在保險箱裏面,你就算拿到了保險箱,沒有保險箱的鑰匙也拿不到鑰匙。
HTTPS 怎麼驗證網站服務器身份
HTTPS 第二個目的是對網站服務器進行真實身份認證,那麼這一點又是怎麼作到的呢?
先來看一個問題,上一步咱們已經解決了數據加密的問題,雖然攻擊者沒法解密數據,可是他能夠篡改數據,咱們怎麼知道數據沒被動過呢?
數據被篡改怎麼辦
這個時候就要使用數字簽名了,數字簽名:將原文(部分數據關鍵信息)先用 Hash 函數生成消息摘要,而後用發送者的私鑰加密生成數字簽名,與原文一塊兒傳送給接收者。
兩個關鍵點:
客戶端如何校驗數字簽名呢?(利用服務器私鑰加密,公鑰解密)客戶端收到服務器發過來的數字簽名以後:
若是兩個信息摘要一致,說明數據沒有被篡改。OK,到這裏可能你以爲沒問題了!
其實最後還有一個很關鍵的點是:咱們剛剛全部的假設都基於客戶端的公鑰是服務器傳遞過來的,那若是攻擊者僞造了服務器的公鑰怎麼辦呢?
服務器公鑰被篡改怎麼辦
這個時候就要使用數字證書了,數字證書認證機構(CA)處於客戶端與服務器雙方均可信賴的第三方機構的立場上。
服務端向 CA 申請數字證書,審覈經過後 CA 會向申請者簽發認證文件-證書,包含如下內容:
拿到數字證書後,服務器傳遞數字證書給客戶端。
客戶端怎麼校驗數字證書
步驟以下: