我們正在設計一款iOS遊戲,其中一些用戶可能會修改從無服務器創建的後端回來作弊的響應(通過MITM僞證書)。爲了在一定程度上抵消這一點,我們希望簽署一份很難理解的簽名。這個實現全部完成(並且在Serverless-Offline上工作,但由於API網關的限制,我們很難從Lambda返回原始JSON,因此我們需要能夠獲得JSON的快照以確保當我們進行校驗和時,字符串化版本的順序是相同的,否則,它可能會在iOS端進行不同的計算,在這種情況下,它已經是一個字符串,然後被充入對象中。返回一個字符串,並沒有API網關逃避它我該如何去簽署API Gateway和Lambda的響應?
例如:
callback(null, flattened_json_string);
在Serverless-Offline上產生正確的響應,因爲它允許你返回一個字符串。當API網關實際上是託管,我們得到的東西逃走,如:
"{\"metadata\":{\"cmKey\":\"537d1a54916e56bac1d03478b18575e8c0c74d86\",\"cacheReady\":true,\"serverTime\":1467433541108},\"commands\":[]}"
我不知道如何在這樣的塊來傳遞,但我不希望它被解析並重新字符串化和風險由於校驗和而改變的順序。
我也知道有很好的javascript框架來獲取對象的hases,但這顯然不適用於iOS上的客戶端。
是否有可能期望來自服務器的特定證書?如果客戶想要攔截流量並對其進行修改,通常很容易相信替代的根證書,然後在動態簽名修改的請求 – David
如果是您的SSL證書或您控制的證書,那麼您將知道[證書指紋](http://security.stackexchange.com/a/35694/32112),這是出於所有實際目的,不會被篡改。如果您使用的是像https:// example.execute-api.us-east-1.amazonaws.com這樣的通用端點,那麼這些信息應該仍然具有合理的一致性和可預測性,但無法控制。 –