更新時間:2019-02-13 10:52 來源:動力節(jié)點(diǎn) 瀏覽11519次
Http接口安全概述
1、Http接口是互聯(lián)網(wǎng)各系統(tǒng)之間對接的重要方式之一;
使用http接口,開發(fā)和調(diào)用都很方便,也是被大量采用的方式,它可以讓不同系統(tǒng)之間實現(xiàn)數(shù)據(jù)的交換和共享,但由于http接口開放在互聯(lián)網(wǎng)上,那么我們就需要有一定的安全措施來保證不能是隨隨便便就可以調(diào)用;
2、目前國內(nèi)互聯(lián)網(wǎng)公司主要采用兩種做法實現(xiàn)接口的安全;
一種是以支付寶等支付公司為代表的私鑰公鑰簽名驗證機(jī)制,一種是大量互聯(lián)網(wǎng)企業(yè)都常采用的參數(shù)簽名驗證機(jī)制;
接口的安全也是在實踐中總結(jié)出來的,并經(jīng)歷了幾個過程:
1.完全開放的接口(完全開放)
2.接口參數(shù)簽名(基本安全)
什么是參數(shù)簽名?
參數(shù)簽名就是指將請求的所有參數(shù),按照某種簽名算法生成一個簽名串,在請求的時候帶上這個簽名串一起請求接口;
接口參數(shù)簽名步驟如下:
第1步: 將所有參數(shù)(除去sign本身),按參數(shù)名字母升序排序;
第2步: 然后把排序后的參數(shù)按:參數(shù)1=值1&參數(shù)2=值2…&參數(shù)n=值n(這里的參數(shù)和值都是是傳輸參數(shù)的原始值,不是經(jīng)過處理的)的方式拼接成一個字符串;
第3步: 把分配給接入方的驗證密鑰key拼接在第2步得到的字符串后面;
第4步: 計算第3步字符串的md5值,使用md5值的16進(jìn)制字符串作為最終sign的的值;
舉例說明:
比如傳輸?shù)臄?shù)據(jù)是:
http://www.xxx.com/interface?idCard=110819000000000000&phone=13700000000&bankCard=6232898709123216&sign=sign_value
其中sign參數(shù)對應(yīng)的sign_value就是簽名的值;
第一步,拼接字符串,首先去除sign參數(shù)本身,剩下的為:
idCard=110819000000000000&realName=張三&phone=13700000000&bankCard=6232898709123216
然后按參數(shù)名字符升序排序:
bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=張三
第二步,然后做參數(shù)名和值的拼接,最后得到:bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=張三
第三步,在上面拼接得到的字符串前加上驗證密鑰key,我們假設(shè)是abcdefg,得到新的字符串:
bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=張三&key=abcdefg
第四步,然后將這個字符串進(jìn)行md5十六進(jìn)制計算,假設(shè)得到的是opqrst,該值即為sign簽名值;
3.接口參數(shù)簽名+時效性驗證(更加安全)
該種機(jī)制與上一種機(jī)制一樣;
只是在參數(shù)中新增一個時間戳,接口方驗證時間戳是否在允許的時間范圍內(nèi);
4.接口參數(shù)私鑰簽名公鑰驗簽(固若金湯)
這是一種更為安全的方式,它通過私鑰和公鑰實現(xiàn)接口的安全,目前互聯(lián)網(wǎng)中主要是以支付寶為代表的公司采用這種機(jī)制;(有很多開放平臺也是采用這種機(jī)制)
這種簽名方式通過4把密鑰來實現(xiàn);
客戶端應(yīng)用私鑰
客戶端應(yīng)用公鑰
服務(wù)端應(yīng)用私鑰
服務(wù)端應(yīng)用公鑰
5.接口參數(shù)簽名+Https(金鐘罩)
該方式是在第2或3種方式的基礎(chǔ)上添加https,https需要在服務(wù)器上進(jìn)行配置;
6.接口參數(shù)私鑰簽名公鑰驗簽+Https(金鐘罩)
該方式是在第4種方式的基礎(chǔ)上添加https,https需要在服務(wù)器上進(jìn)行配置即可;
當(dāng)然:安全是相對的,只有相對的安全,沒有絕對的安全!
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743