【求解释】关于第三方接口调用中安全的疑问

首先声明,我对什么加密解密,公钥私钥啊就是一小白。在看支付宝接口的时候,突然心生一疑问:与接口通讯中如何保证不被窃取和篡改?不懂~求解释。

下面是一个典型的支付宝接口方式。

  1.  去支付宝申请接口权限,然后他会给你一个“partnerId” 和一个 “privateKey”。
  2. 然后请求某个接口的时候应该是这样的:  serviceURI+msg&partnerId=partnerId&sing=MD5(msg+partnerId+privateKey);就是说你的报文和partnerId是明文的,然后用你要发送的报文+你的partnerId+你的privateKey做MD5运算,产生签名。同时把签名发给支付宝。
  3. 支付宝接到请求后,从明文拿到你的partnerId,再从他库里检索到你的privateKey。同样对报文+你的partnerId+你的privateKey做MD5运算,如果算出得签名和你发给他的签名没有问题,认为消息是没有篡改过的。

  那,我的问题是。如果我是黑客,我也去支付宝申请了一对我的“partnerId” 和 “privateKey”。然后,我拦截了你发送给支付宝的请求,截下来之后,我对请求做了篡改,再把其中的partnerId替换成我的。并用我的partnerId和privateKey重新做签名。最后再把篡改后的请求发送给支付宝。支付宝接收到的时候由于partnerId是我的了。我也是用的我的partnerId和privateKey做签名。所以他的签名验证应该是可以通过的。也就说,他会认为这个请求没有问题!但事实上这个请求是被我篡改了的! 这是怎么回事呢?

  有同学说,因为使用了HTTPs 所以不用担心请求被拦截的问题。可惜我对HTTPs同样不了解。如果HTTPs足够可靠的话。那还要什么privateKey,还要签名干什么?直接请求就行了啊。不懂。希望大家能给我解释一下,越详细越好。给我科普科普。

  PS:我这只是拿支付宝举例子,貌似大部分第三方接口调用都是这个模式~

posted @ 2011-12-31 10:16  咖啡不苦  阅读(3572)  评论(3编辑  收藏  举报