爲何須要認證算法
經由 HTTP 協議進行通訊的數據大都是未經加密的明文,包括請求參數、返回值、cookie、 head 等數據,所以,外界經過對通訊的監聽,即可垂手可得地根據請求和響應雙方的格式,僞造諸求與響應,修改和竊取各類信息。相對於基於TCP 協議層面的通訊方式,針對 HTTP協議的攻擊門檻更低。所以,基於HTTP協議的Web與SOA架構,在應用的安全性方面須要更加劇視。經由瀏覽器的訪問請求,能夠經過瀏覽器插件進行網絡監聽,以及查看傳輸的網絡參數。好比chrome瀏覽器,能夠按F12去打開插件或者右擊選擇檢查。chrome
經過插件,能夠清楚地看到HTTP請求所生成的任何參數及響應的body信息,這些數據如沒有特殊處理,都是未經加密的明文,包括用戶的用戶名與密碼。固然,瀏覽器插件大多數狀況下只能看到本機瀏覽的信息。更爲危險的事情是,攻擊者能夠經過對一 些網絡核心節點的控制,再加上一 些特殊的手段如端口映射、代理監聽等,使其可以監聽和攔截到大量用戶的通訊數據包,經過對數據包進行篩選和分析,能夠獲得通訊所涵蓋的用戶的全部敏感信息,如電子郵件、聊天記錄甚至是登陸的用戶名和密碼。數組
因而可知,獲取網絡中HTTP協議通訊的細節並不是十分困難的事情。爲了防止在通訊的過程當中,數據被中途攔截和修改,或者虛假的客戶端冒充正常的客戶端發起請求,非法與服務端進行通訊,獲取數據,再或者是客戶端與虛假的服務端進行通訊,將我的信息泄露給惡意的攻擊者,須要對請求和響應的參數及客戶端的身份或服務端的身份進行認證,以保證正確信息發送給了合法的接收者。瀏覽器
總結: 由於網絡請求通常是Http請求,HTTP協議進行通訊的數據大都是未經加密的明文,包括請求參數、返回值、cookie、 head 等數據,所以,外界經過對通訊的監聽能夠獲取不少信息而後修改。是不安全的。安全
摘要認證的原理cookie
鑑於使用HTTPS性能上的成本以及須要額外申請 CA 證書,在這種狀況下,一 般採用對參數和響應進行摘要的方法,即可以知足需求。網絡
針對每次請求和響應,按照一 定的規則生成數字摘要,數字摘要須要涵蓋客戶端與服務端通訊的內容,以及雙方約定好的鹽值以此來保障請求與響應不被第三方篡改。常見的摘要算法包括MDS、SHA等關於摘要算法的介紹。我這篇文章已經講解過了: www.jianshu.com/p/cfa1b5bc5…架構
因爲傳遞端和接收端都認爲HTTP協議的請求參數是無序的,所以客戶端與服務端雙方約定好參數的排序方式。請求的參數通過排序後,再將參數名稱和值通過一 定的策略組織起來,加上一個密鑰 secret , 也就是所謂的 「鹽", 而後經過約定的摘要算法生成數寧摘要,傳遞給服務端。分佈式
在服務端接收到客戶端傳遞的參數後,服務端會採用與客戶端相同的策略對參數進行排序,而且加上相同的secret, 採用相同的摘要方式生成摘要串。因爲相同內容通過相同的摘要算法,生成的摘要內容一定是相同的。將服務端生成的摘要串與客戶端生成摘要串進行比較,這樣能夠得知參數內容是否被篡改。性能
一樣的,服務端返回的響應也須要加上secret, 採用約定好的摘要算法生成相應的摘要,並將生成的摘要做爲響應的一 部分,返回給客戶端,以便驗證服務端返回數據的合法性。
當客戶端接收到服務端的響應後,加上相同的secret進行拼接,並採用與服務端相同的摘要算法進行摘要,生成的摘要串與服務端傳遞過來的摘要串進行比較,這樣即可得知服務端的響應是否被篡改。
因爲摘要算法的不可逆性,而且大部分狀況下不一樣的請求參數會有不一樣的服務端響應,鑑於參數和響應的多變性,摘要認證這種方式可以在一 定程度上防止信息被篡改,保障通訊的安全。
可是,摘要認證的安全性取決於secret的安全性,因爲服務端與客戶端採用的是相同的secret,一 旦 secret泄露,通訊的安全則沒法保障。
摘要認證的實現
實現起來主要包含以下四個方面:客戶端參數摘要生成、服務端參數摘要校驗、服務端響應摘要生成和客戶端響應摘要校驗。
2服務端參數摘要校驗
服務端接收到請求的參數後,按照與客戶端相同的方式將參數排序,而後將參數的名稱與參數的值串起來,生成待摘要字符串,而且使用與客戶端相同的摘要算法生成摘要串,最後將服務端生成的摘耍串與客戶端經過header或者其餘形式傳遞過來的摘要串進行比較,若是一致,表示參數沒有遭到篡改,反之則說明參數遭到篡改。
params爲服務端接收到的客戶端傳遞過來的參數Map, digest爲客戶端參數的簽名,服力端經過將參數名稱放入TreeSet排序,可以取得跟客戶端一 樣的參數順序,將排好序的參數組 口起來,生成摘要,與客戶端傳遞的摘要對比,即可得知消息是否被篡改。服務端生成響應內容之後,在響應內容的後面加上secret,即是待摘要串,而後使用MD5等摘要算法生成響應的摘要串。
content爲服務端響應的JSON數據或者HTML文本數據,生成摘要後,爲了方便互聯網傳輸,使用Base64對摘要數據進行編碼。4客戶端響應摘要校驗
客戶端接收到服務端的響應內容後,在響應內容的後面加上secret,便成爲待摘要串,而後經過MD5等摘要算法的計算來生成對應的響應摘要,與服務端經過header等方式傳遞回來的摘要串進行比較,若是一致,表示響應沒有被繼改,反之則說明參數遭到篡改。
responseContent 爲客戶端收到的服務端響應,digest爲服務端傳遞過來的摘要信息,經過客戶端進行計算,即可得知服務端響應是否被篡改。摘自: 《大型分佈式網站架構設計與實踐》 閱讀筆記