安全架构-api通达信怎么倒入金证外围接口,接口签名防止数据篡改
本篇为安全架构中api通达信怎么倒入金证外围接口,接口通信安全相关的内容,之前介绍了业务安全,如幂等性设计,不熟悉的朋友可以看下幂等性设计的文章。
api通达信怎么倒入金证外围接口,接口通讯是当前软件架构中使用非常广泛的方式,分布式架构,微服务架构,Restful通达信怎么倒入金证外围接口,接口;内部系统之间通达信怎么倒入金证外围接口,接口,第三方系统调用的通达信怎么倒入金证外围接口,接口;提供给第三方的通达信怎么倒入金证外围接口,接口等方面,都会用到api通达信怎么倒入金证外围接口,接口调用。最常见的有微信支付宝支付通达信怎么倒入金证外围接口,接口对接,百度API通达信怎么倒入金证外围接口,接口对接,各种第三方业务通达信怎么倒入金证外围接口,接口对接,等等,都会涉及到API通达信怎么倒入金证外围接口,接口通讯安全处理。作为一个架构师,必须熟悉掌握此部分安全设计,本文介绍通达信怎么倒入金证外围接口,接口通讯安全中的防止数据篡改问题-通达信怎么倒入金证外围接口,接口签名。
什么是通达信怎么倒入金证外围接口,接口签名?
通达信怎么倒入金证外围接口,接口签名是在进行API通达信怎么倒入金证外围接口,接口调用的时候,通达信怎么倒入金证外围接口,接口调用方按照通达信怎么倒入金证外围接口,接口提供方要求的算法生成签名字段,并传递签名字段,通达信怎么倒入金证外围接口,接口提供方接受到签名字段后,按照相同的算法对数据进行签名计算,比较二者的值,相同则签名验证通过,可以进行后续业务处理。
通达信怎么倒入金证外围接口,接口签名作用
处于开放环境的数据传输都是可以被截取,甚至被篡改的,通过finder等工具,可以抓取网络请求的数据,如果不做签名,则可以任意修改请求数据,是业务逻辑处理完全混乱。签名算法保障数据不可篡改,请求的数据参入了签名,数值改变签名也会改变。需完全知道签名算法的调用方可以生成改变后的签名,网络截取数据,因不知道签名算法和签名秘钥,生成不成功新的签名,因此调用失败。因签名算法互联网做法基本相同,因此很容易破解,因此在签名秘钥上必须注重传输安全。当前常用做法一般是线下传输签名秘钥,双方共同保存好签名秘钥。。因此能正确签名验证成功,也说明调用方具有该通达信怎么倒入金证外围接口,接口的调用权限,是一个基本的权限控制方法。
常用做法
签名算法
将所有业务请求参数按字母先后顺序排序,不包括签名字段本身;参数名称和参数值按键值对链接成一个字符串A;key1=value1&key2=value2&k3=v3在字符串A的末尾直接拼上appsecret组成一个新字符串B:key1=value1&key2=value2&k3=v3appsecret对字符串B进行md5得到签名sign;假设请求的参数为:fo=1,bo=23,ko=3排序后为bo=23&fo=1&ko=3参数名和参数值链接后为bo=23&fo=1&ko=3末尾加上appsecret后mdmd5(bo=23&fo=1&ko=33appsecret);通达信怎么倒入金证外围接口,接口调用时,传递参数sign=sign;
签名算法变种
上述算法中,存在不同的变种方式,双方约定好即可。如:参数值为null的是否参与签名;末尾直接拼上appsecret.也可以首尾都直接拼上appsecret;计算签名时的参数连接方式可以key=value也可以随意定义如key|valu很多场景增加了appid参数,同appsecret一起提供给调用方。appid需要参与签名和明文传递。
**http://api/method?appid=123123123dasdf&fo=1&bo=23&ko=33&sign=BCC7C71CF93F9CDBDB88671B701D8A35**
微信支付签名算法
签名算法签名生成的通用步骤如下:第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序,使用URL键值对的格式拼接成字符串stringA。特别注意以下重要规则:◆参数名ASCII码从小到大排序;◆如果参数的值为空不参与签名;◆参数名区分大小写;◆验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。◆微信通达信怎么倒入金证外围接口,接口可能增加字段,验证签名时必须支持增加的扩展字段第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。◆key设置路径:微信商户平台(pay.weixiqq.co–>账户设置–>API安全–>密钥设置举例:假设传送的参数如下:appid:wxd930ea5d5a258f4fmch_id:10000100device_info:1000body:testnonce_str:ibuaiVcKdpRxkhJA第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:stringA=“appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA”;第二步:拼接API密钥:stringSignTemp=stringA+'&key=192006250b4c09247ec02edce69f6a2d'//注:key为商户平台设置的密钥keysign=MD5(stringSignTemp).toUpperCase()=“9A0A8659F005D6984697E2CA0A9CF3B7”//注:MD5签名方式sign=hash_hmac(“sha256”,stringSignTemp,key).toUpperCase()=“6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6”//注:HMAC-SHA256签名方式,部分语言的hmac方法生成结果二进制结果,需要调对应函数转化为十六进制字符串。最终得到最终发送的数据:
wxd930ea5d5a258f4f
10000100
1000
test
ibuaiVcKdpRxkhJA
9A0A8659F005D6984697E2CA0A9CF3B7
支付宝支付签名算法
筛选并排序获取所有请求参数,不包括字节类型参数,如文件、字节流,剔除sign字段,剔除值为空的参数,并按照第一个字符的键值ASCII码递增排序,如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。
拼接将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串。
请求示例普通公钥和公钥证书两种方式的请求参数有所区别,下面分别介绍两种方式的请求示例:
普通公钥方式下面的请求示例,参数值都是示例,开发者参考格式即可:
REQUESTURL:https://openapalipay.com/gateway.doREQUESTMETHOD:POSTCONTENT:app_id=2014072300007148method=alipay.mobilpublimenu.addcharset=GBKsign_type=RSA2timestamp=2014-07-2403:07:50biz_content={“button”:[{“actionParam”:“ZFB_HFCZ”,“actionType”:“out”,“name”:“话费充值”},{“name”:“查询”,“subButton”:[{“actionParam”:“ZFB_YECX”,“actionType”:“out”,“name”:“余额查询”},{“actionParam”:“ZFB_LLCX”,“actionType”:“out”,“name”:“流量查询”},{“actionParam”:“ZFB_HFCX”,“actionType”:“out”,“name”:“话费查询”}]},{“actionParam”:“http://alipay.com”,“actionType”:“link”,“name”:“最新优惠”}]}sign=e9zEAe4TTQ4LPLQvETPoLGXTiURcxiAKfMVQ6Hrrsx2hmyIEGvSfAQzbLxHrhyZ48wOJXTsD4FPnt+YGdK57+fP1BCbf9rIVycfjhYCqlFhbTu9pFnZgT55W+xbAFb9y7vL0MyAxwXUXvZtQVqEwW7pURtKilbcBTEW7TAxzgro=version=0待签名字符串
app_id=2014072300007148&biz_content={“button”:[{“actionParam”:“ZFB_HFCZ”,“actionType”:“out”,“name”:“话费充值”},{“name”:“查询”,“subButton”:[{“actionParam”:“ZFB_YECX”,“actionType”:“out”,“name”:“余额查询”},{“actionParam”:“ZFB_LLCX”,“actionType”:“out”,“name”:“流量查询”},{“actionParam”:“ZFB_HFCX”,“actionType”:“out”,“name”:“话费查询”}]},{“actionParam”:“http://alipay.com”,“actionType”:“link”,“name”:“最新优惠”}]}&charset=GBK&method=alipay.mobilpublimenu.add&sign_type=RSA2×tamp=2014-07-2403:07:50&version=0公钥证书方式下面的请求示例,参数值都是示例,开发者参考格式即可:
REQUESTURL:https://openapalipay.com/gateway.doREQUESTMETHOD:POSTCONTENT:app_id=2014072300007148method=alipay.mobilpublimenu.addcharset=GBKsign_type=RSA2app_cert_sn=50fa7bc5dc305a4fbdbe166689ddc827alipay_root_cert_sn=6bc29aa3b4d406c43483ffea81e08d22timestamp=2014-07-2403:07:50biz_content={“button”:[{“actionParam”:“ZFB_HFCZ”,“actionType”:“out”,“name”:“话费充值”},{“name”:“查询”,“subButton”:[{“actionParam”:“ZFB_YECX”,“actionType”:“out”,“name”:“余额查询”},{“actionParam”:“ZFB_LLCX”,“actionType”:“out”,“name”:“流量查询”},{“actionParam”:“ZFB_HFCX”,“actionType”:“out”,“name”:“话费查询”}]},{“actionParam”:“http://alipay.com”,“actionType”:“link”,“name”:“最新优惠”}]}sign=e9zEAe4TTQ4LPLQvETPoLGXTiURcxiAKfMVQ6Hrrsx2hmyIEGvSfAQzbLxHrhyZ48wOJXTsD4FPnt+YGdK57+fP1BCbf9rIVycfjhYCqlFhbTu9pFnZgT55W+xbAFb9y7vL0MyAxwXUXvZtQVqEwW7pURtKilbcBTEW7TAxzgro=version=0说明:公钥证书方式下,开发者发送给开放平台网关请求参数中,需携带应用公钥证书SN、支付宝根证书SN,若不携带这两个参数,网关会拒绝请求。SN值是通过解析X.509证书文件中签发机构名称以及内置序列号,将二者拼接后的字符串计算MD5值获取,可参考开放平台SDK源码中AlipaySignaturgetCertSN实现app_cert_sn的提取:
/***获取证书序列号*@paramcertPathX.509证书文件路径*@return返回证书序列号*@throwsAlipayApiException*/publicstaticStringgetCertSN(StringcertPatAntCertificationUtigetRootCertSN实现alipay_root_cert_sn的提取:
/***获取根证书序列号*@paramrootCertContent*@return*/publicstaticStringgetRootCertSN(StringrootCertContent)待签名字符串
alipay_root_cert_sn=6bc29aa3b4d406c43483ffea81e08d22&app_cert_sn=50fa7bc5dc305a4fbdbe166689ddc827&app_id=2014072300007148&biz_content={“button”:[{“actionParam”:“ZFB_HFCZ”,“actionType”:“out”,“name”:“话费充值”},{“name”:“查询”,“subButton”:[{“actionParam”:“ZFB_YECX”,“actionType”:“out”,“name”:“余额查询”},{“actionParam”:“ZFB_LLCX”,“actionType”:“out”,“name”:“流量查询”},{“actionParam”:“ZFB_HFCX”,“actionType”:“out”,“name”:“话费查询”}]},{“actionParam”:“http://alipay.com”,“actionType”:“link”,“name”:“最新优惠”}]}&charset=GBK&method=alipay.mobilpublimenu.add&sign_type=RSA2×tamp=2014-07-2403:07:50&version=0调用签名函数使用各自语言对应的SHA256WithRSA(对应sign_type为RSA或SHA1WithRSA(对应sign_type为RS签名函数利用商户私钥对待签名字符串进行签名,并进行Base64编码。
把生成的签名赋值给sign参数,拼接到请求参数中。可以参考开放平台SDK源码中AlipaySignaturrsaSign方法。
支付宝官方说明文档:https://opendocs.alipay.com/open/291/106118https://opendocs.alipay.com/open/291/sign
总结
签名算法处理基本雷同,重点是在签名秘钥的处理和加密算法的选择上,签名秘钥可以线下传递也可线上动态传递。签名算法可以保障数据不被篡改,而要保障数据不被重复反复非法调用,还需结合之前文章介绍的幂等性,增加token或时间戳机制。
文章为作者独立观点,不代表股票交易接口观点