首先聲明,我對什么加密解密,公鑰私鑰啊就是一小白。在看支付寶接口的時候,突然心生一疑問:與接口通訊中如何保證不被竊取和篡改?不懂~求解釋。
下面是一個典型的支付寶接口方式。
- 去支付寶申請接口權限,然后他會給你一個“partnerId” 和一個 “privateKey”。
- 然后請求某個接口的時候應該是這樣的: serviceURI+msg&partnerId=partnerId&sing=MD5(msg+partnerId+privateKey);就是說你的報文和partnerId是明文的,然后用你要發送的報文+你的partnerId+你的privateKey做MD5運算,產生簽名。同時把簽名發給支付寶。
- 支付寶接到請求后,從明文拿到你的partnerId,再從他庫里檢索到你的privateKey。同樣對報文+你的partnerId+你的privateKey做MD5運算,如果算出得簽名和你發給他的簽名沒有問題,認為消息是沒有篡改過的。
那,我的問題是。如果我是黑客,我也去支付寶申請了一對我的“partnerId” 和 “privateKey”。然后,我攔截了你發送給支付寶的請求,截下來之后,我對請求做了篡改,再把其中的partnerId替換成我的。並用我的partnerId和privateKey重新做簽名。最后再把篡改后的請求發送給支付寶。支付寶接收到的時候由於partnerId是我的了。我也是用的我的partnerId和privateKey做簽名。所以他的簽名驗證應該是可以通過的。也就說,他會認為這個請求沒有問題!但事實上這個請求是被我篡改了的! 這是怎么回事呢?
有同學說,因為使用了HTTPs 所以不用擔心請求被攔截的問題。可惜我對HTTPs同樣不了解。如果HTTPs足夠可靠的話。那還要什么privateKey,還要簽名干什么?直接請求就行了啊。不懂。希望大家能給我解釋一下,越詳細越好。給我科普科普。
PS:我這只是拿支付寶舉例子,貌似大部分第三方接口調用都是這個模式~
