互聯網中接口安全解決方案


Http接口安全概述

  1、Http接口是互聯網各系統之間對接的重要方式之一;

使用http接口,開發和調用都很方便,也是被大量采用的方式,它可以讓不同系統之間實現數據的交換和共享,但由于http接口開放在互聯網上,那么我們就需要有一定的安全措施來保證不能是隨隨便便就可以調用;

  2、目前國內互聯網公司主要采用兩種做法實現接口的安全;

一種是以支付寶等支付公司為代表的私鑰公鑰簽名驗證機制,一種是大量互聯網企業都常采用的參數簽名驗證機制;

接口的安全也是在實踐中總結出來的,并經歷了幾個過程:

1.完全開放的接口(完全開放)

2.接口參數簽名(基本安全)

  什么是參數簽名?

參數簽名就是指將請求的所有參數,按照某種簽名算法生成一個簽名串,在請求的時候帶上這個簽名串一起請求接口;

  接口參數簽名步驟如下:

第1步: 將所有參數(除去sign本身),按參數名字母升序排序;

第2步: 然后把排序后的參數按:參數1=值1&參數2=值2…&參數n=值n(這里的參數和值都是是傳輸參數的原始值,不是經過處理的)的方式拼接成一個字符串;

第3步: 把分配給接入方的驗證密鑰key拼接在第2步得到的字符串后面;

第4步: 計算第3步字符串的md5值,使用md5值的16進制字符串作為最終sign的的值;

舉例說明:

比如傳輸的數據是:

http://www.xxx.com/interface?idCard=110819000000000000&phone=13700000000&bankCard=6232898709123216&sign=sign_value

其中sign參數對應的sign_value就是簽名的值;

第一步,拼接字符串,首先去除sign參數本身,剩下的為:

idCard=110819000000000000&realName=張三&phone=13700000000&bankCard=6232898709123216

然后按參數名字符升序排序:

bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=張三

第二步,然后做參數名和值的拼接,最后得到:bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=張三

第三步,在上面拼接得到的字符串前加上驗證密鑰key,我們假設是abcdefg,得到新的字符串:

bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=張三&key=abcdefg

第四步,然后將這個字符串進行md5十六進制計算,假設得到的是opqrst,該值即為sign簽名值;

   3.接口參數簽名+時效性驗證(更加安全)

該種機制與上一種機制一樣;

只是在參數中新增一個時間戳,接口方驗證時間戳是否在允許的時間范圍內;

   4.接口參數私鑰簽名公鑰驗簽(固若金湯)

這是一種更為安全的方式,它通過私鑰和公鑰實現接口的安全,目前互聯網中主要是以支付寶為代表的公司采用這種機制;(有很多開放平臺也是采用這種機制)

這種簽名方式通過4把密鑰來實現;

客戶端應用私鑰

客戶端應用公鑰

服務端應用私鑰

服務端應用公鑰

   5.接口參數簽名+Https(金鐘罩)

該方式是在第2或3種方式的基礎上添加https,https需要在服務器上進行配置;

   6.接口參數私鑰簽名公鑰驗簽+Https(金鐘罩)

該方式是在第4種方式的基礎上添加https,https需要在服務器上進行配置即可;

當然:安全是相對的,只有相對的安全,沒有絕對的安全!

上一篇:持續集成Jenkins
下一篇:集群環境下的定時任務

開班信息

齐天大圣捕鱼机 打鱼1000炮 赛车34567必中技巧 彩票pk10软件 大乐游戏mg游戏pt游戏sw游戏 重庆时时三星单选走势图 稳赚家园是做什么任务啊 365彩票手机app下载 17年极速时时开奖 排球 北京pk十开奖历史记录 鼎龙娱乐是干嘛的 北京时时规律时间表 app自助领取彩金38 竞彩二串一跟单计划 北京单场怎么投注 新平台电子送免费彩金不限id