關於http和https的安全問題
普通http請求存在的問題
在 http 協議下,中間者可以隨意嗅探使用者搜尋內容,竊取隱私甚至篡改網頁。不過 https 是這些劫持行為的克星,能夠完全有效地防禦。
所以,就有了https,使用 https 協議主要是為了保護使用者隱私,防止流量劫持。
解決方法
https的特點
https原理
流程如下:
1. 客戶端發起乙個https的請求,把自身支援的一系列cipher suite(金鑰演算法套件,簡稱cipher)傳送給服務端。
2. 服務端存在乙個公匙和私匙。
3. 服務端,接收到客戶端所有的cipher後與自身支援的對比,如果不支援則連線斷開,反之則會從中選出一種加密演算法和hash演算法以證書的形式返回給客戶端 證書中還包含了 公鑰 頒證機構 ** 失效日期等等。
4. 客戶端收到服務端響應後會做以下幾件事
(1)驗證證書的合法性
頒發證書的機構是否合法與是否過期,證書中包含的**位址是否與正在訪問的位址一致等,證書驗證通過後,在瀏覽器的位址列會加上一把小鎖(每家瀏覽器驗證通過後的提示不一樣 不做討論)。
(2)生成隨機密碼
如果證書驗證通過,或者使用者接受了不授信的證書,此時瀏覽器會生成一串隨機數,然後用證書中的公鑰加密。
(3)hash握手資訊
用最開始約定好的hash方式,把握手訊息取hash值, 然後用 隨機數加密 「握手訊息+握手訊息hash值(簽名)」 並一起傳送給服務端。
在這裡之所以要取握手訊息的hash值,主要是把握手訊息做乙個簽名,用於驗證握手訊息在傳輸過程中沒有被篡改過。
5. 客戶端將加密後的內容傳給服務端
6. 服務端拿到客戶端傳來的密文,用自己的私鑰來解密握手訊息取出隨機數密碼,再用隨機數密碼 解密 握手訊息與hash值,並與傳過來的hash值做對比確認是否一致。
7. 然後用隨機密碼加密一段握手訊息(握手訊息+握手訊息的hash值 )給客戶端。
8. 客戶端用隨機數解密並計算握手訊息的hash,如果與服務端發來的hash一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器生成的隨機密碼並利用對稱加密演算法進行加密。
因為這串金鑰只有客戶端和服務端知道,所以即使中間請求被攔截也是沒法解密資料的,以此保證了通訊的安全
常用加密解密演算法
如何抓取https的請求資料
當站點由http轉成https後是更安全了,但是有時候要看線上的請求資料解決問題時卻麻煩了,因為是https的請求,你就算攔截到了那也是加密的資料,沒有任何意義。
抓取流程如下:
https是否真的足夠安全
https是安全的,因為有證書和加密機制做保障!
但是,有個可怕的方法叫「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):
模仿https的流程,可以看草稿箱
這個流程跟https的驗證流程很相似,也存在驗證效果,就是因為做多了幾部驗證的操作,讓黑客無法猜測到如何訪問伺服器的api,即使入侵了使用者的電腦,竊取到使用者的賬號密碼,也無法登陸系統竊取使用者錢財,是跟黑客一起討論後得出的結果。
中間人攻擊
除了dns劫持,黑客還有其他方法能夠擷取使用者資訊,如下:
注射式攻擊
這種方式的會話劫持比中間人攻擊實現起來簡單一些,它不會改變會話雙方的通訊流,而是在雙方正常的通訊流插入惡意資料。在注射式攻擊中,需要實現兩種技術:
如果是udp協議,只需偽造ip位址,然後傳送過去就可以了,因為udp沒有所謂的tcp三次握手,但基於udp的應用協議有流控機制,所以也要做一些額外的工作。對於ip欺騙,有兩種情況需要用到:1)隱藏自己的ip位址;2)利用兩台機器之間的信任關係實施入侵。在unix/linux平台上,可以直接使用socket構造ip包,在ip頭中填上虛假的ip位址,但需要root許可權;在windows平台上,不能使用winsock,需要使用winpacp(也可以使用libnet)。例如在linux系統,首先開啟乙個raw socket(原始套接字),然後自己編寫ip頭及其他資料。
參考
關於HTTP和HTTPS的區別
超文字傳輸協議 http,hypertext transfer protocol 是網際網路上應用最為廣泛的一種網路協議。所有的www檔案都必須遵守這個標準。設計http最初的目的是為了提供一種發布和接收html頁面的方法。1960年美國人ted nelson構思了一種通過計算機處理文字資訊的方法,...
關於HTTP和HTTPS的區別
一 http和https的基本概念 1 http 是網際網路上應用最為廣泛的一種網路協議,是乙個客戶端和伺服器端請求和應答的標準 tcp 用於從www伺服器傳輸超文字到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少。2 https 是以安全為目標的http通道,簡單講是http的安全版...
HTTP安全通訊 Https和SSL
1 簡介 https 全稱 hypertext transfer protocol over secure socket layer 是以安全為目標的http通道,簡單講是http的安全版。網路通訊協議棧自上而下分別為應用層 傳輸層 網路層和資料鏈路層。傳輸層不能對傳輸報文段進行加密處理,於是在應用...