后端經(jīng)常需要與web,andorid,ios交互,有的時候前后端交互的請求和響應數(shù)據(jù)的進行明文傳輸,接口也沒有做嚴格的身份校驗,確保該接口只能由特定的用戶訪問。為了保證安全性,可以采取以下幾種方式
使用https
HTTP 協(xié)議(超文本傳輸協(xié)議)是客戶端瀏覽器或其他程序與 Web 服務器之間的應用層通信協(xié)議;HTTPS 協(xié)議可以理解為 HTTP+SSL/TLS, 即 HTTP 下加入 SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL,用于安全的 HTTP 數(shù)據(jù)傳輸。SSL/TLS協(xié)議解決了:所有信息都是加密傳播,第三方無法竊聽;具有校驗機制,一旦被篡改,通信雙方會立刻發(fā)現(xiàn);配備身份證書,防止身份被冒充。
對請求進行簽名
加簽和驗簽就是在請求發(fā)送方將請求參數(shù)通過加密算法生成一個sign值,放到請求參數(shù)里;請求接收方收到請求后,使用同樣的方式對請求參數(shù)也進行加密得到一個sign值,只要兩個sign值相同,就說明參數(shù)沒有被篡改。驗簽過程是將請求url按照上述的規(guī)則進行同樣的操作,計算得到參數(shù)的簽名值,然后和參數(shù)中傳遞的sign值進行對比,如果一致則校驗通過,否則校驗不通過。生成簽名參數(shù)sign如下:
1.將所有以頭參數(shù),除去sign本身,以及值是空的參數(shù),按參數(shù)鍵字母升序排序。
2.然后把排序后的參數(shù)按參數(shù)1值1參數(shù)2值2......參數(shù)n值n的方式拼接成一個字符串。
3.把分配給接入方的驗證密鑰key拼接在第2步得到的字符串前面。
4.在上一步得到的字符串前面加上密鑰key,然后計算md5值,得到32位字符串,然后轉成大寫,得到的字符串作為sign的值放到請求參數(shù)里。
對請求和響應進行加解密
對一些敏感數(shù)據(jù),我們需要進行加密處理,常見的加解密方式有AES 對成加密方式和RSA非對成方式,至于如何運用,可以參考https的原理,有點復雜,不過可以簡單分成如下幾步:
1.服務器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,服務器端保存著私鑰,不能將其泄露,公鑰可以發(fā)送給任何人。
2.服務器將自己的公鑰發(fā)送給客戶端。
3.客戶端收到服務器端的公鑰之后,會對公鑰進行檢查,驗證其合法性,如果發(fā)現(xiàn)發(fā)現(xiàn)公鑰有問題,那么HTTPS傳輸就無法繼續(xù)。也就是說這是驗證服務器發(fā)送的數(shù)字證書的合法性。如果公鑰合格,那么客戶端會生成一個隨機值,這個隨機值就是用于進行對稱加密的密鑰,我們將該密鑰稱之為client key,即客戶端密鑰。然后用服務器的公鑰對客戶端密鑰進行非對稱加密,這樣客戶端密鑰就變成密文了。
4.客戶端會發(fā)起HTTPS中的第二個HTTP請求,將加密之后的客戶端密鑰發(fā)送給服務器。
5.服務器接收到客戶端發(fā)來的密文之后,會用自己的私鑰對其進行非對稱解密,解密之后的明文就是客戶端密鑰,然后用客戶端密鑰對數(shù)據(jù)進行對稱加密,這樣數(shù)據(jù)就變成了密文。
6.服務器將加密后的密文發(fā)送給客戶端。
7.客戶端收到服務器發(fā)送來的密文,用客戶端密鑰對其進行對稱解密,得到服務器發(fā)送的數(shù)據(jù)。