關於web安全開發之簽名認證

簽名認證的原理java

1.客戶端請求數宇簽名生成算法

與摘要認證的方式相似,因爲傳遞端和接收端都認爲HTTP協議的請求參數是無序的,所以對於簽名認證來講,客戶端與服務端雙方須要約定好參數的排序方式。請求的參數通過排序後,再將參數名稱和值通過必定的策略組織起來,這時再也不是加上 secret, 而是直接經過約定的摘要算法來生成數字摘要,而且使用客戶端私鑰對數字摘要進行加密,將加密的密文傳遞給服務端。架構

代碼實現: 分佈式

Java的java.security.Signature對數字簽名的支持也很是出色,經過getlnstance方法取得MDSwithRSA的實例,即經過MDS進行數字摘要,而且使用RSA算法進行非對稱加密,使用客戶端私鑰對signature進行初始化,update方法傳入待摘要串,經過sign方法便可以取得對應內容的數字簽名。

2服務端參數簽名校驗網站

在服務端接收到客戶端傳遞的參數後,服務端會採用與客戶端相同的策略對參數進行排序,並使用相同的摘要方式生成摘要串,而後服務端使用客戶端的公鑰將接收到的密文進行解密,獲得客戶端生成的摘要串,將服務端生成的摘要串與客戶端生成摘要串進行比較。這樣即可以得知,參數是否由客戶端生成,而且參數的內容是否被篡改。 編碼

代碼實現 加密

使用Signature一樣能夠對數字簽名進行校驗,經過MD5withRSA獲取Signature的實例,而後使用客戶端公鑰對signature進行初始化,將待摘要字符串傳入update方法,而後使用verify方法即可以對數字簽名進行校驗。

3.服務端響應數字簽名生成架構設計

一樣的,服務端返回的響應,也須要採用約定好的摘要算法生成相應的摘要,而且使用服務端的私鑰進行加密,而後將生成的密文做爲響應的一 部分,返回給客戶端,以便驗證服務端的身份及返回數據的合法性。 設計

代碼實現 cdn

服務端將須要響應的內容做爲待摘要串,使用MD5算法進行摘要,而後使用服務端的私鑰對摘要串進行加密,而且對加密的密文進行十六進制編碼。

  1. 客戶端響應簽名校驗

當客戶端接收到服務端的響應後,採用與服務端相同的摘要算法進行摘要,生成摘要串,而後使用服務端的公鑰解密接收到的簽名密文,獲得服務端生成的摘要串,此時與客戶端生成的摘要串進行比較,即可得知響應是否由服務端發出,以及響應的內容是否被篡改。

代碼實現

客戶端接收到服務端響應responseContent後,經過MD5算法生成摘要,而後使用服務端的公鑰,對桵收到的數字簽名進行解密,將解密獲得的摘要串與經過MD5生成的摘要串進行對比,即可得知響應是否由服務端發送,以及響應的內容是否被篡改。

總結

簽名認證能很好地解決客戶端與服務端身份校驗問題,以及通訊內容防篡改問題。但HTTP協議使用的是明文傳輸,對於任何中途攔截客戶端與服務端通訊的第三方來講,通訊傳輸的內容是可見的。經過對通訊的攔截,可以監聽和還原客戶端與服務端的通訊內容。對於這種狀況,數字簽名的方式便無能爲力了。

摘自: 《大型分佈式網站架構設計與實踐》 閱讀筆記

相關文章
相關標籤/搜索