在前端面試博弈過程當中常常會被問到https、ssl相關內容,咱們對比總結一下。html
在http協議中可能存在信息竊聽或者身份假裝的安全問題,使用https能夠通訊機制能夠有效的防止這些問題。前端
https = http + ssl
http的缺點面試
HTTP + 加密 + 認證 + 完整性保護 = HTTPSHTTPS 是身披SSL外殼的HTTP安全
https有如下特性服務器
TLS/SSL
內容加密數字證書(CA)
驗明身份,防止中間人攻擊MD五、SHA-1
等散列值方法防止信息篡改數據加解密使用同一份密鑰,加解密速度快,效率高,缺點是密鑰的管理難度大,一旦密鑰傳輸泄露,那就沒啥用處了。session
因此解決辦法就是下面的併發
使用一對非對稱密鑰。一把叫私有密鑰,另外一把叫公有密鑰,私有密鑰存儲於服務器,公有密鑰隨意發送。也就是說,發送密文方使用對方的公有密鑰進行加密,對方接受到信息後,使用私有密鑰進行解密。再不使用私有密鑰狀況下很難還原信息。 dom
HTTPS採用對稱加密和公開密鑰加密二者混合加密,二者都有各自的優勢。對稱加密處理速度快,但密鑰沒法安全發送給對方;非對稱加密處理速度慢,但密鑰可以安全交換。 但若是咱們將兩種加密方式一塊兒使用,則兩種加密方式就能互補。也就是說,利用非對稱加密方式安全地交換在共享密鑰加密中要使用的密鑰,在確保密鑰安全前提下,使用對稱加密方式進行通訊加密
數字證書的一種,遵循SSL協議,由受信任的數字證書頒發機構CA,在驗證服務器身份後頒發,具備服務器身份驗證和數據傳輸加密功能,我經常使用的是 DigiCert 免費版,有效期只有一年。長期的證書仍是很貴的。spa
開始加密通訊以前,客戶端和服務器首先必須創建鏈接和交換參數,這個過程叫作握手(handshake)。如圖:
隨機數(Client random)
,以及客戶端支持的加密方法。隨機數(Server random)
。隨機數(Premaster secret)
,並使用數字證書中的公鑰,加密這個隨機數,發給鮑勃。"對話密鑰"(session key)
,用來加密接下來的整個對話過程。一、客戶端生成一個隨機數
,帶着客戶端所支持的加密方法List
,傳遞給服務器端,本身的隨機數先存着。
二、服務器接收到這個隨機數,先存着,生成一個新的隨機數
,並從客戶端傳過來的加密方法List中選擇一個最合適的加密方法
,還有本身的數字證書(公鑰
),三個一併發送給客服端。
三、客戶端確認數字證書有效,拿到隨機數先存着,再生成一個新的隨機數
,而後用公鑰加密這個隨機數,生成一個 預主祕鑰(Premaster secret)
,將預主祕鑰發送給服務器端。 當前步驟中的預主祕鑰是本次加密的關鍵,前2個隨機數都是明文傳送,當前這個使用公鑰加密,因此不容易拿到,即便拿到也沒有關係,由於只有服務器上的祕鑰才能解析,才知道第三個隨機數是什麼。
四、服務器接收到預主祕鑰以後,用私鑰解密獲得隨機數。到此,客服端和服務器端都知道了三個 隨機數。 用這個三個隨機數生成 對話祕鑰(session key)
,用來加密接下來的全部對話過程。
來張圖就是這個樣子:
總結:HTTPS 使用的混合加密的方式來進行加密處理的。最重要的加密是第三個隨機數的傳輸,以此來保證本次傳輸的安全性。