目錄
1.前言
2.兩種加密解密方式
2.1對稱加密
2.2非對稱加密
3.HTTPS的加密過程
3.1針對明文的對稱加密
3.2針對密鑰的非對稱加密
3.3證書的作用
1.前言
? 我們知道HTTP協議是超文本傳輸協議,它被廣泛的應用在客戶端服務器上,用來傳輸文字,圖片,視頻,js,html等.但是這種傳輸如果經過了黑客的路由器或者別有用心的人的設備,可以很輕松的破解并修改我們的內容,這種協議的安全性得不到保障.為了解決這種問題,我們引入了HTTPS,它是基于HTTP協議的一種加密安全協議,可以把HTTP協議傳輸的內容進行加密傳輸,讓黑客或者別有用心的人破解不了.
2.兩種加密解密方式
2.1對稱加密
? ?我們首先要說明一個概念就是HTTP是明文傳輸的,如果我們想讓他被加密,那么就需要用到數據加密.那么我們應該如何對正文部分進行加密呢?考慮到資源消耗成本問題還有揭秘問題.我們可以使用對稱加密對數據進行加密,即加密和解密的算法都是同一個密鑰.
2.2非對稱加密
? 而非對稱加密,加密和解密采用的是兩個密鑰 ,如k1,k2這兩個密鑰是成對的,k1用來加密,此時k2就用來解密.也可以使用k2加密 ,k1解密.我們可以把一個密鑰公開出去,而這個公開出去的密鑰,就是公鑰,還有一個密鑰自己保存好,這個密鑰就是私鑰.手里只有一把的話,是無法知道另一把是啥的.
? 看起來非對稱加密很安全,但是這種加密方式,所需要消耗的系統資源開銷也更大.
那么HTTPS是如何進行加密的呢?
3.HTTPS的加密過程
我們站在黑客的角度來看,如果一個HTTP請求或者響應進行傳輸,在不考慮服務器被黑的情況下,傳遞到服務器之前,如果黑客想攔截的話,則需要在傳遞的過程中攔截.
如下圖所示:
數據首先從客戶端傳遞到服務器的過程中被黑客攔截了.如果是HTTP明文傳輸,那么就會被黑客直接拿到數據,這樣,黑客如果想篡改數據或者拿到隱私去做違法犯罪的事情就很容易.
那么我們該如何在盡可能不影響效率的情況下對HTTP請求進行加密呢?
3.1針對明文的對稱加密
我們可以使用對稱加密我們的數據,即客戶端和服務器公用同一個密鑰,這樣黑客拿到數據以后就破解不了了
我們需要注意兩點
1.對稱加密的時候,客戶端和服務器用的是同一個密鑰
2.不同的客戶端的,用的密鑰都不同,
這也就意味著,每個客戶端鏈接服務器的時候,都需要生成一個隨機的密鑰,并且告訴給服務器.也不一定是客戶端生成,服務器生成并且告訴給客戶端也可以,
但是這個密鑰生成的過程,很容易被黑客拿到,即告訴了客戶端的時候,黑客也可以拿到這個這個密鑰,哪就形同虛設了.
那么這種情況應該怎么辦呢? 我們可以使用非對稱加密把密鑰進行單獨的密文傳輸.
3.2針對密鑰的非對稱加密
我們使用非對稱加密的主要目的就是把明文密鑰進行加密,確保密鑰的安全性.
這里有同學可能會問,那么為什么不能直接把明文對稱加密呢,而是要大費周章的這樣搞?原來這是因為非對稱加密使用的系統資源遠大于對稱加密,如果大規模使用,就很難承擔了.
我們讓服務器生成公鑰和私鑰,公鑰可以告訴所有人,而私鑰只有服務器自己知道.客戶端就可以使用公鑰對密鑰加密,這樣黑客就算拿到了這個密鑰,因為他沒有解密所需的私鑰,也解不開這個密鑰.
只要這個對稱密鑰的數據到達服務器,后續就可以客戶端和服務器通過這個密鑰來進行交流,黑客就無法破解后續的內容了,
上述過程看似天衣無縫,但是在聰明的黑客眼里,還是很容易破解,即使用中間人攻擊
服務器可以創建自己的公鑰和私鑰,那么黑客也可以用同樣的方式,創建出一對公鑰和私鑰,冒充自己是服務器,
在服務器拿到了基于pub1加密的key 的時候,自然可以通過自己的私鑰解密,也就相信了是這么回事.后續的交流都是key,而客戶端全程渾然不知.他只是拿到了假的公鑰然后加密傳給黑客,黑客解密后就拿到了key.然后通過服務器的pub1加密,偽造自己是客戶端傳給服務器.
這種方法如何解決呢?最關鍵的一點,在客戶端拿到公鑰的時候,要是有辦法驗證這個公鑰是不是真的.而不是黑客給的.
3.3證書的作用
要求服務器這邊提供一個證書.
證書是一個結構化的數據結構,有很多屬性.
如:服務器的域名,公鑰,證書有效期等
證書會有一個簽名,里面本質上是一個加密的校驗和,可以把證書其它字符進行一系列的算法得到一個校驗和,如果兩份數據一樣,即校驗和一樣,那么就說明是一樣的,如果不一樣,則兩份數據不一樣.就是這個公鑰有問題.
客戶端拿到證書以后主要做兩件事:
1.用一樣的算法進行計算,得到校驗和1
2/使用系統內置的公證機構公鑰,對證書的簽名進行解密,得到校驗和2.
對比一下就知道是不是真的了.
市面上的公證機構沒幾家,基本上都在操作系統里面.公鑰也都在
1.如果黑客直接修改公鑰,不修改簽名,那么校驗和不一樣,就識別出來了,
2.如果黑客修改公鑰,也嘗試修改簽名,但是他不知道私鑰是什么,所以無法生成加密的簽名.
如果黑客拿自己的私鑰加密呢?客戶端用公證機構的公鑰解密也會失敗.
上述操作,就把客戶端篡改證書的行為給堵死了.
所以這種方法是可行的.這也是市面上流行的方法.