三种保证URL地址可信的加密方式
近日接到一個需求,要求一臺資源服務器不僅在可以暴露在公網環境下的同時,還要保證只接受并處理可信的http訪問請求。
?
需求場景如圖:
為了訪問資源文件,用戶需要首先訪問某一臺Frontend Server進行用戶身份認證———所有的用戶信息均由Frontend Server保存,Frontend Server認證通過后返回真實的重定向地址,用戶再根據重定向地址訪問Resource Server獲取資源文件。
具體的使用場景正如上面所述,下面是我的思考過程...
?
為了保證資源服務器收到的是一個可信的重定向地址,在安全性上有三點考慮:
?
?
以上三點也可以總結為:防止公網用戶偽造URL地址,防止不可信Frontend Server偽造地址,防止過期URL地址訪問。
由于Resource Server需要允許所有的公網用戶訪問,所以不能對Ip進行限制,并且一般情況下Resouce Server也不會與Frontend Server直接通信,因此只能通過URL的驗證方式。Frontend Server在生成每個URL的過程中中應包括Resource Server為每一個Frontend Server分配的賬戶fsId、密鑰fsKey以及記錄當前URL生成時間的時間戳fstime。fsid必須明文傳輸,fsKey做為加密運算的一個常量不可以明文傳輸。
可以想到的有如下三種:
1.使用自定的加密函數生成加密簽名字符串。
加密函數將所有需要明文傳輸的參數以及當前Frontend Server使用的密鑰fsKey做為參數并通過MD5轉換后生成加密簽名字符串,md5(encode(params,fsid, fskey, fstime))。
重定向地址鏈接:
http://res.com/fsid=***&fstime=***¶ms=***&signmsg=md5(encode(params,fsid,fskey, fstime))
Resource Server收到該請求后
- 根據fstime判斷該請求是否過期,過期請求直接返回。
- 根據fsid判斷該Frontend Server是否可信,如可信再根據fsid獲得服務器端保存的fskey。
- 使用相同的參數加密簽名過程,Resource Server根據params,fsid, fskey, fstime生成簽名字符串。
- 比較重定向地址傳來的簽名字符串signmsg與本地生成的簽名字符串是否相同,相同則認為是可信請求,否則為非法請求。
2.使用對稱加密算法保證HTTP通信可信。
Resource Server為每一臺Frontend Server分配不同的Des密鑰(fskey),Frontend Server使用對稱加密算法對拼接后的傳遞參數進行加密des(params|fstime)
重定向地址鏈接:
http://res.com/fsid=***&desmsg= des(params|fstime)
Resource Server收到該請求后
- 首先根據fsid判斷該Frontend Server是否可信,如可信再根據fsid獲得每個Frontend Server使用的Des密鑰fskey。
- 使用密鑰對desmsg信息解密,解密失敗直接返回。
- 根據解密后的fstime判斷是否過期,過期直接返回。
3.同時使用非對稱,對稱加密算法保證HTTP通信可信。
Frontend Server隨機生成key做為對稱加密算法的公鑰des(params|fskey|fstime),并使用Resource Server提供的公鑰對key進行非對稱加密rsa(key)
重定向地址鏈接:
http://res.com/fsid=***&rsamsg=rsa(key)&desmsg= des(params|fskey|fstime)
Resource Server收到該請求后
- 首先根據fsid判斷該Frontend Server是否可信,如可信再根據服務器端保存的非對稱加密私鑰解密rsa(key)。
- 根據key解密des(params|fskey|fstime)。
- 通過fsid獲得服務器端保存的fskey,對比解密后的fskey,如果不相同則認為是Frontend Server偽造的非法請求。
- 根據fstime判斷是否過期,過期直接返回。
以上三種方法第一種會暴露所有的明文傳遞參數,第二種貌似最方便但卻有被攻破的危險,第三種有可能又會產生效率的問題。
由于沒有進行過相關方面的開發,以上也是對平時了解有限的一些資料的總結,難免考慮不周。各位有更好的方法和建議嗎?
?
?
總結
以上是生活随笔為你收集整理的三种保证URL地址可信的加密方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 龙测案例-拼多多小程序
- 下一篇: Class文件结构介绍[访问标志,类索引