一種基於http協議的敏感資料傳輸方案

2021-09-14 04:00:07 字數 2166 閱讀 1378

最近公司需要通過公網與其它平台完成介面對接,但是基於開發時間和其它因素的考慮,本次對接無法採用https協議實現。既然不能用https協議,那就退而求其次採用http協議吧!

1、敏感資訊的不可見性
使用http協議傳輸資料很容易被抓包監聽傳輸內容,如果這些資料中存在敏感資訊的話,風險太大了。因此我們需要對我們的傳輸資料進行一定的加密處理,即使資料被預期接收方之外的其它不法分子攔截,也無法輕易的破譯此次請求的傳輸內容!最簡單的方案就是對傳輸資料使用base64方法轉碼,使得資料具備一定的不可讀性。當然啦,這種方案實際上是不可取的,因為base64方案太容易被識別然後解密了。比較常見的做法是,傳送方和接收方彼此約定金鑰,傳送方傳送時用金鑰對資料加密,接收方用金鑰對資料解密。比如aes128加密演算法?但是aes128加密也存在侷限性,需要定期維護。就算你認為你這方的內部人員是可信的,你也無法無法保證對方的金鑰不會洩漏吧。當然聰明的你可能會說,那我就使用非對稱加密演算法,比如rsa好了。好像是沒啥問題?但是如果資料量比較大的話,rsa加密方法對伺服器的壓力也是很大的。。所以本次結合了aes和rsa來實現我們的資料傳輸。

2、防止資料被篡改
用簽名!用簽名!用簽名!重要的事情說三遍?例如:當資料被封裝好後,我們可以用md5演算法計算出待傳輸資料的摘要字串作為簽名。當伺服器接受到資料後,同樣使用md5對資料做摘要,同請求報文中的簽名作比較,若不一致則說明該http請求資料已被篡改。但僅僅使用md5對資料作摘要就夠了嗎?萬一攻擊方發現了資料簽名是用md5做的,攻擊方只需要對已篡改的資料再做一次md5,同時更新請求中的簽名即可。因此如何生成可靠的簽名也需要我們仔細的斟酌。有幾點我覺得是需要注意的:1、無法輕易的根據簽名推反推出當前簽名所採用的演算法;2、簽名演算法的複雜性、可靠性;3、不要直接對傳輸資料作簽名,可以先對請求資料作摘要,再使用加密演算法生成簽名,既可以提公升效率也在一定程度上提高了安全性。

3、http請求的真實性
上面簡單的介紹了http傳輸敏感資料需要注意的地方,本方案具體實現思路如下圖所示:

傳送方需要幹的事
1、生成簽名

本次介面傳輸採用rest模式作為標準,先構造待傳輸物件。構造完成後借用google的gson包來將物件轉換成json字串。

2、加密請求報文

傳送方建立乙個http請求時,需要動態的生成乙個aeskey,同時使用該aeskey對請求資料作加密處理。為什麼每次請求都需要生成乙個新的aeskey呢?主要還是為了防止資料洩漏。如果固定使用相同的key,萬一key被傳送方內部人員洩漏了,其實也對傳送資料的加密也就沒有意義了。

3、加密aes金鑰

在http請求傳遞資料時,aes金鑰也會被同樣傳遞過去。為了保證aes金鑰的安全性,我們採用rsa公鑰對aes金鑰作加密處理。處理完後會放到http請求頭的authencation欄位中。

4、構造http請求

5、處理http請求結果

在此之前,請求方和傳送方需要約定返回結果的加密方式。傳送方接收到http請求返回結果後,通過約定的方式對返回結果進行處理,以供後續使用。這裡我們僅簡單的約定接收方使用接收到的aes金鑰對返回資料作加密後返回即可。

接收方需要幹的事
1、請求的真實性校驗

獲取http請求頭中的timestamp欄位,同時與系統時間作比較。如果請求時間與當前系統時間間隔在五分鐘之內,則認為請求是真實的,反之則認為請求是非法的。

2、獲取aes金鑰

從http請求中的securtiykey獲取被加密的aes金鑰,使用rsa金鑰對其解密,獲取可供使用的aes金鑰

3、獲取請求報文

從httpbody中獲取請求報文,使用上面第二步生成的aes金鑰解密請求報文

4、驗籤

5、業務處理

使用第三步得到的請求報文進行業務處理

6、返回處理結果

使用第二步獲取到的aes金鑰對返回結果作加密處理並返回

總結本次http請求傳輸敏感資料方案的實現,上面做了詳細的介紹。另外多提一下。在接收方進行驗籤的時候,我們可以定義乙個過濾器來過濾指定http請求。在過濾器中完成驗籤的工作,以避免在業務處理**中摻雜驗籤**!同時使用過濾器也可以對請求返回結果進行加工處理,在這裡就是用aes金鑰加密返回結果啦!

tsunami 一種基於UDP協議的快速傳輸

一.需求 最近在做資料庫遷移,經常需要打包例項傳輸,傳統scp感覺很慢。二.軟體資訊 1.軟體主頁 2.軟體安裝 直接原始碼make make install 三.簡單使用 以下介紹簡明步驟 在源機子開啟tsunami程序 tsunamid 在目標機子 connect ip get 四.測試 在幾台...

tsunami 一種基於UDP協議的高速傳輸

一.需求 近期在做資料庫遷移,常常須要打包例項傳輸,傳統scp感覺非常慢。二.軟體資訊 1.軟體主頁 2.軟體安裝 直接源 make make install 三.簡單使用 下面介紹簡明步驟 在源機子開啟tsunami程序 tsunamid 在目標機子 connect ip get 四.測試 在幾台...

一種基於mget的資料持久辦法

專案中需要一部分資料常駐於redis中,但是要求資料冷卻下來之後自動掉出記憶體,所以使用了如下的方法 材料php,mget,sql 的 in 首先方法體開頭迴圈傳入的陣列引數list,拼接成redis中的key,存放於新陣列userlist中,然後呼叫mget userlist 獲得結果settin...