本篇文章帶大家了解一下http存在的問題,介紹https是怎么保證安全的。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。
HTTP存在的問題
1、竊聽風險:通信使用明文(不加密),內容可能會被竊聽(第三方可能獲知通信內容)
2、冒充風險:不驗證通信方的身份,因此有可能遭遇偽裝
3、篡改風險:無法證明報文的完整性,所以有可能已遭篡改
HTTPS
可以看到 HTTPS的網站,在瀏覽器的地址欄內會出現一個帶鎖的標記。
HTTPS并非是應用層一個新的協議,通常 HTTP 直接和 TCP 通信,HTTPS則先和安全層(SSL/TLS)通信,然后安全層再和 TCP 層通信。
SSL/TLS協議就是為了解決上面提到的HTTP存在的問題而生的,下面我們來看一下它是怎么解決的:
1、所有的信息都是加密傳輸的,第三方無法竊聽
2、配備身份驗證,防止身份被冒充
3、具有校驗機制,一旦被篡改,通信雙方會立刻發現
加密
對稱加密
加密和解密同用一個秘鑰的方式稱為 共享秘鑰加密,也被叫做對稱秘鑰加密。
-
瀏覽器發送給服務端 client_random 和一系列加密方法
-
服務端發送給瀏覽器 server_random和加密方法
現有瀏覽器和服務器有了三個相同的憑證:client_random、server_random和加密方法
用加密方法把 client_random、server_random 兩個隨機數混合起來,生成秘鑰,這個密鑰就是瀏覽器和服務端通信的暗號。
存在的問題:第三方可以在中間獲取到client_random、server_random和加密方法,由于這個加密方法同時可以解密,所以中間人可以成功對暗號進行解密,拿到數據,很容易就將這種加密方式破解了。
非對稱加密
-
瀏覽器發送給服務端 一系列加密方法
-
服務端發送給瀏覽器 加密方法以及公鑰
之后瀏覽器通過公鑰將數據加密傳輸給服務端,服務端收到數據使用私鑰進行解密。服務端給瀏覽器發送數據,則使用私鑰進行加密,瀏覽器收到服務端發送過來的數據,使用公鑰進行解密。
存在的問題:
-
非對稱加密效率太低, 這會嚴重影響加解密的速度,進而影響到用戶打開頁面的速度。
-
無法保證服務器發送給瀏覽器的數據安全, 服務器的數據只能用私鑰進行加密(因為如果它用公鑰那么瀏覽器也沒法解密啦),中間人一旦拿到公鑰,那么就可以對服務端傳來的數據進行解密了,就這樣又被破解了。
HTTPS使用對稱加密和非對稱加密結合
傳輸數據階段依然使用對稱加密,但是對稱加密的秘鑰我們采用非對稱加密傳輸。
-
瀏覽器向服務器發送client_random和加密方法列表。
-
服務器接收到,返回server_random、加密方法以及公鑰。
-
瀏覽器接收,接著生成另一個隨機數pre_master, 并且用公鑰加密,傳給服務器。(重點操作!)
-
服務器用私鑰解密這個被加密后的pre_master。
到此為止,服務器和瀏覽器就有了相同的 ?client_random、server_random 和 pre_master, 然后服務器和瀏覽器會使用這三組隨機數生成對稱秘鑰。有了對稱秘鑰之后,雙方就可以使用對稱加密的方式來傳輸數據了。
CA (數字證書)
使用對稱和非對稱混合的方式,實現了數據的加密傳輸。但是這種仍然存在一個問題,服務器可能是被黑客冒充的。這樣,瀏覽器訪問的就是黑客的服務器,黑客可以在自己的服務器上實現公鑰和私鑰,而對瀏覽器來說,它并不完全知道現在訪問的是這個是黑客的站點。
服務器需要證明自己的身份,需要使用權威機構頒發的證書,這個權威機構就是 CA(Certificate Authority), 頒發的證書就稱為數字證書 (Digital Certificate)。
對于瀏覽器來說,數字證書有兩個作用:
-
通過數字證書向瀏覽器證明服務器的身份
-
數字證書里面包含了服務器公鑰
下面我們來看一下含有數字證書的HTTPS的請求流程
相對于不含數字證書的HTTPS請求流程,主要以下兩點改動
-
服務器沒有直接返回公鑰給瀏覽器,而是返回了數字證書,而公鑰正是包含數字證書中的;
-
在瀏覽器端多了一個證書驗證的操作,驗證了證書之后,才繼續后序流程。
參考
推薦教程:如何用通俗易懂的話來解釋非對稱加密?