普通http請求存在的問題
在 http 協議下,中間者可以隨意嗅探使用者搜尋內容,竊取隱私甚至篡改網頁。不過 https 是這些劫持行為的克星,能夠完全有效地防禦。
所以,就有了https,使用 https 協議主要是為了保護使用者隱私,防止流量劫持。
解決方法
https的特點
https原理
流程如下:
1. 客戶端發起乙個https的請求,把自身支援的一系列cipher suite(金鑰演算法套件,簡稱cipher)傳送給服務端。
2. 服務端存在乙個公匙和私匙。
3. 服務端,接收到客戶端所有的cipher後與自身支援的對比,如果不支援則連線斷開,反之則會從中選出一種加密演算法和hash演算法以證書的形式返回給客戶端 證書中還包含了 公鑰 頒證機構 ** 失效日期等等。
4. 客戶端收到服務端響應後會做以下幾件事
(1)驗證證書的合法性
頒發證書的機構是否合法與是否過期,證書中包含的**位址是否與正在訪問的位址一致等,證書驗證通過後,在瀏覽器的位址列會加上一把小鎖(每家瀏覽器驗證通過後的提示不一樣 不做討論(官網:www.fhadmin.org))。
(2)生成隨機密碼
如果證書驗證通過,或者使用者接受了不授信的證書,此時瀏覽器會生成一串隨機數,然後用證書中的公鑰加密。
(3)hash握手資訊
用最開始約定好的hash方式,把握手訊息取hash值, 然後用 隨機數加密 「握手訊息+握手訊息hash值(簽名)」 並一起傳送給服務端。
在這裡之所以要取握手訊息的hash值,主要是把握手訊息做乙個簽名,用於驗證握手訊息在傳輸過程中沒有被篡改過。
5. 客戶端將加密後的內容傳給服務端
6. 服務端拿到客戶端傳來的密文,用自己的私鑰來解密握手訊息取出隨機數密碼,再用隨機數密碼 解密 握手訊息與hash值,並與傳過來的hash值做對比確認是否一致。
7. 然後用隨機密碼加密一段握手訊息(握手訊息+握手訊息的hash值 )給客戶端。
8. 客戶端用隨機數解密並計算握手訊息的hash,如果與服務端發來的hash一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器生成的隨機密碼並利用對稱加密演算法進行加密。
因為這串金鑰只有客戶端和服務端知道,所以即使中間請求被攔截也是沒法解密資料的,以此保證了通訊的安全
常用加密解密演算法
如何抓取https的請求資料
當站點由http轉成https後是更安全了,但是有時候要看線上的請求資料解決問題時卻麻煩了,因為是https的請求,你就算攔截到了那也是加密的資料,沒有任何意義。
https是否真的足夠安全
https是安全的,因為有證書和加密機制做保障!
(官網:www.fhadmin.org)
但是,有個可怕的方法叫「dns劫持」,簡單的說黑客為了繞過https,採用了ssl層剝離的技術,黑客阻止使用者和使用https請求的**之間建立ssl連線,使使用者和**伺服器(攻擊者所控制的伺服器)之間使用了未加密的http通訊。
工作流程如下圖:
工作原理
1. 客戶端傳送網域名稱請求給 dns
2. dns通過遍歷查詢dns資料庫,來解析此網域名稱對應的ip,然後反饋至瀏覽器客戶端
3. 客戶端通過ip與對方建立資料連線
4. 問題就出在dns伺服器上,如果使用者訪問的dns伺服器是黑客的,然後返回的ip也是黑客預先準備好的伺服器,那麼使用者資訊就會洩露
預防dns劫持的方法
1. 從使用者的角度,防止dns劫持
(2)修改路由器web登陸密碼,不要用過於簡單的密碼,也能預防被入侵
(3)注意url是否被重寫了,是否是https,是否有一把小鎖
2. 服務端通過流程去預防,不要想著使用者有多聰明,會上面的配置,所以要加入自己的流程來預防。
流程如下(還是需要https):
(1)call api 拿到server的public key
(2)web自己gen乙個16位的key1(隨機數)
(3)用public來加密這個key1 -> encryptkey1(用rsa演算法)
(4)前端將 encryptkey1 傳給server
(5)server 通過 private key 解密 encryptkey1,拿到 key1(用rsa演算法)
(6)server 自己 gen 乙個16位的 key2(隨機數)
(7)server 用 key1 加密 key2 -> encryptkey2 ,然後返回給前端
(8)前端用 key1 去解密 encryptkey2 ,拿到 key2(用aes演算法)
(9)這樣,前後端都會得到 key1 和 key2,合成乙個 sessionkey
(10)資料傳輸時,就將資料轉成 json 字串,然後用 sessionkey 加密後請求真正的api
這個流程跟https的驗證流程很相似,也存在驗證效果,就是因為做多了幾部驗證的操作,讓黑客無法猜測到如何訪問伺服器的api,即使入侵了使用者的電腦,竊取到使用者的賬號密碼,也無法登陸系統竊取使用者錢財,是跟黑客一起討論後得出的結果。
HTTPS和HTTP的區別
https secure hypertext transfer protocol 安全超文字傳輸協議 它是乙個安全通訊通道,它基於http開發,用於在客戶計算機和伺服器之間交換資訊。它使用安全套接字層 ssl 進行資訊交換,簡單來說它是http的安全版。它是由netscape開發並內置於其瀏覽器中,...
HTTPS和HTTP的區別
https secure hypertext transfer protocol 安全超文字傳輸協議 它是乙個安全通訊通道,它基於http開發,用於在客戶計算機和伺服器之間交換資訊。它使用安全套接字層 ssl 進行資訊交換,簡單來說它是http的安全版。它是由netscape開發並內置於其瀏覽器中,...
http和https的區別
在url前加https 字首表明是用ssl加密的。你的電腦與伺服器之間收發的資訊傳輸將更加安全。web伺服器啟用ssl需要獲得乙個伺服器證書並將該證書與要使用ssl的伺服器繫結。http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。http的連線很簡單,是無狀態的...