一、客戶端與服務(wù)器的通行采用安全通道
? ? ? ?1、使用SSL/TLS方式通信,客戶端與服務(wù)器采用雙向認(rèn)證,例如https
二、采用多重加解密方式對(duì)客戶端與服務(wù)器的通信數(shù)據(jù)進(jìn)行加密傳輸
? ? ? ?1、客戶端軟件發(fā)布前,客戶端保存一個(gè)公鑰,服務(wù)器保存一個(gè)私鑰,客戶端與服務(wù)器的基礎(chǔ)通信接口采用這對(duì)秘鑰進(jìn)行加解密 和簽名驗(yàn)證;
? ? ? ?2、用戶身份驗(yàn)證成功后與設(shè)備進(jìn)行綁定,如果更換設(shè)備則需要重新認(rèn)證用戶身份。用戶與設(shè)備綁定后服務(wù)器未每個(gè)用戶生成加解密證書(shū)(非對(duì)稱加密),如果更新設(shè)備需要重新生成新的證書(shū),這個(gè)證書(shū)用于客戶端用戶與服務(wù)器數(shù)據(jù)交互的加解密使用;
? ? ? 3、系統(tǒng)設(shè)置證書(shū)更新策略對(duì)用戶的證書(shū)進(jìn)行更新。
三、身份確認(rèn)機(jī)制,服務(wù)器對(duì)每個(gè)請(qǐng)求都要驗(yàn)證是否合法
? ? ?1、客戶端對(duì)每一個(gè)api訪問(wèn)請(qǐng)求需要加入時(shí)間戳,客戶端對(duì)業(yè)務(wù)數(shù)據(jù)(業(yè)務(wù)數(shù)據(jù)需要加密)加上時(shí)間戳使用證書(shū)進(jìn)行簽名;
? ? ?2、服務(wù)收到請(qǐng)求后首先對(duì)數(shù)據(jù)包進(jìn)行簽名驗(yàn)證,驗(yàn)證數(shù)據(jù)是否合法,在網(wǎng)絡(luò)傳輸過(guò)程中是否被串改;
? ? ?3、服務(wù)器使用當(dāng)前用戶的秘鑰對(duì)業(yè)務(wù)數(shù)據(jù)包進(jìn)行解密,驗(yàn)證業(yè)務(wù)數(shù)據(jù)是否合法。
四、對(duì)客戶端的請(qǐng)求進(jìn)行一次性有效校驗(yàn),防止請(qǐng)求被重放
? ? 1、服務(wù)器通過(guò)接收客戶端的簽名和時(shí)間戳,驗(yàn)證請(qǐng)求是否在有效的時(shí)間范圍內(nèi)發(fā)送,服務(wù)器維護(hù)在這個(gè)時(shí)間范圍類的所有請(qǐng)求的簽名集合,來(lái)驗(yàn)證請(qǐng)求是否被重復(fù)處理,從而達(dá)到請(qǐng)求被重放的目的;
五、數(shù)據(jù)格式采用自定義二進(jìn)制協(xié)議(破解難度大,開(kāi)發(fā)成本稍高)