簽名認證的原理java
1.客戶端請求數宇簽名生成算法
與摘要認證的方式相似,因爲傳遞端和接收端都認爲HTTP協議的請求參數是無序的,所以對於簽名認證來講,客戶端與服務端雙方須要約定好參數的排序方式。請求的參數通過排序後,再將參數名稱和值通過必定的策略組織起來,這時再也不是加上 secret, 而是直接經過約定的摘要算法來生成數字摘要,而且使用客戶端私鑰對數字摘要進行加密,將加密的密文傳遞給服務端。架構
代碼實現: 分佈式
2服務端參數簽名校驗網站
在服務端接收到客戶端傳遞的參數後,服務端會採用與客戶端相同的策略對參數進行排序,並使用相同的摘要方式生成摘要串,而後服務端使用客戶端的公鑰將接收到的密文進行解密,獲得客戶端生成的摘要串,將服務端生成的摘要串與客戶端生成摘要串進行比較。這樣即可以得知,參數是否由客戶端生成,而且參數的內容是否被篡改。 編碼
代碼實現 加密
3.服務端響應數字簽名生成架構設計
一樣的,服務端返回的響應,也須要採用約定好的摘要算法生成相應的摘要,而且使用服務端的私鑰進行加密,而後將生成的密文做爲響應的一 部分,返回給客戶端,以便驗證服務端的身份及返回數據的合法性。 設計
代碼實現 cdn
當客戶端接收到服務端的響應後,採用與服務端相同的摘要算法進行摘要,生成摘要串,而後使用服務端的公鑰解密接收到的簽名密文,獲得服務端生成的摘要串,此時與客戶端生成的摘要串進行比較,即可得知響應是否由服務端發出,以及響應的內容是否被篡改。
代碼實現
總結
簽名認證能很好地解決客戶端與服務端身份校驗問題,以及通訊內容防篡改問題。但HTTP協議使用的是明文傳輸,對於任何中途攔截客戶端與服務端通訊的第三方來講,通訊傳輸的內容是可見的。經過對通訊的攔截,可以監聽和還原客戶端與服務端的通訊內容。對於這種狀況,數字簽名的方式便無能爲力了。
摘自: 《大型分佈式網站架構設計與實踐》 閱讀筆記