設計安全HTTP介面方案

2021-09-24 05:10:20 字數 3911 閱讀 4420

token(長度3-32字元)、

加密秘鑰(43位字元組成)

加密簽名(token、時間戳、隨機數)

引數說明

引數    說明

access_token    獲取到的憑證

expires_in    憑證有效時間,單位:秒

使用rsa和aes設計http api介面傳輸:

傳送方:

1.生成簽名

(1)將傳輸物件轉換成json字串

(2)使用md5生成json字串摘要

(3)使用rsa公鑰對摘要字串作加密處理,生成簽名。

2.加密請求報文

建立http請求時動態生成乙個aeskey,用來對請求資料加密。

3.使用rsa公鑰加密aes秘鑰

4.構造http請求

(1)簽名欄位authencation

(2)加密後的aes秘鑰securitykey

(3)時間戳timestamp

(4)加密報文http body中

×tamp=13265322¶m=http body中

接收方:

1.驗證時間戳

請求時間和系統時間間隔在5分鐘內請求為合法,否則非法。

2.獲取被rsa加密的aes秘鑰

使用rsa秘鑰解密securtiykey欄位,獲取解密後的aes秘鑰

3.獲取請求報文

從httpbody中獲取請求報文,使用解密後的aes秘鑰對報文解密

4.驗籤

(1)對解密的報文使用md5生成摘要

(2)使用rsa秘鑰對authencation欄位解密,與md5生成的摘要對比是否一致,一致則通過驗籤,否則不通過

5.返回處理結果

使用第二步解密後的aes秘鑰加密返回結果,請求方使用aes解密即可,

這樣真實的aes秘鑰傳輸中不會被知道。

**示例:

1.aeshelper

public class aeshelper

/// /// aes解密

///

/// 密文

/// 金鑰

/// /// 時間戳

///

public class timestamphelper

/// /// 將c# datetime時間格式轉換為unix時間戳格式

///

/// 時間

/// long

public static long convertdatetimetoint(system.datetime time)

/// /// 時間戳轉為c#格式時間

///

///

///

public static datetime convertstringtodatetime(string timestamp)

/// /// 時間戳轉為c#格式時間10位

///

/// unix時間戳格式

/// c#格式時間

public static datetime getdatetimefrom1970ticks(long curseconds)

/// /// 驗證時間戳

///

///

/// 差值(分鐘)

///

public static bool istime(long time, double interval)

else

}/// /// 判斷時間戳是否正確(驗證前8位)

///

///

///

public static bool istime(string time)

else

}}

//請求方

usermodel usermodel = new usermodel()

;//1.請求物件轉換成json

string jsoncontent = jsonconvert.serializeobject(usermodel);

//2.使用md5生成摘要

string md5content = md5helper.md5encrypt64(jsoncontent);

//生成rsa私鑰和公鑰

string generater = rsahelper.generatekeys();

rsahelper.privatekey = generater[0];

rsahelper.publickey = generater[1];

//3.使用rsa加密md5摘要,生成簽名

string signature = rsahelper.encryptstring(md5content, rsahelper.publickey);

//5.使用aes加密請求資料

string aeskey = guid.newguid().tostring("n");

string requestdata = aeshelper.encrypt(jsoncontent, aeskey);

//6.使用rsa加密aes秘鑰

string securitykey = rsahelper.encryptstring(aeskey, rsahelper.publickey);

//時間戳

long timestamp = timestamphelper.convertdatetimetoint(datetime.now);

httphelper.request(requestdata,"引數");

網際網路開發 HTTP介面安全設計

作為http介面的服務端,要能控制你本身自有資料的讀寫許可權。如果任何客戶端在任何時間都能讀寫你的資料,那麼使用者資料很容易被修改。這就好比沒加使用者登入就可以訪問和讀寫所有的系統資料。根本沒有安全性可言了。方案1 加密時間戳 可變的加密串 進行安全控制 原始請求 安全控制後的請求 tamp 543...

php api介面安全設計 sign

一.url請求的引數包括 timestamp,token,username,sign 1.timestamp 時間戮2.token 登陸驗證時,驗證成功後,生成唯一的token 可以為uuid 並把token儲存到快取 redis 裡 鍵為username,值為token 3.username 使用...

WebApi介面安全認證 HTTP之摘要認證

摘要訪問認證是一種協議規定的web伺服器用來同網頁瀏覽器進行認證資訊協商的方法。它在密碼發出前,先對其應用雜湊函式,這相對於http基本認證傳送明文而言,更安全。從技術上講,摘要認證是使用隨機數來阻止進行密碼分析的md5加密雜湊函式應用。它使用http協議。一 摘要認證基本流程 1.客戶端請求 無認...