2011-05-17 220 views
6

我們有一個iOS應用程序,它與後端的各種Web服務交互。然而,後端想要驗證來自它的請求來自我們有效的iOS應用程序,而不是來自重播攻擊或「中間人」攻擊。我們最終會將所有通話都改爲https。但是,有沒有辦法後端可以驗證請求來自我們的合法應用程序?我們正在考慮對每個請求使用加密隨機數,但它仍然容易出現「中間人」攻擊。有沒有可以在iOS應用程序和服務器之間使用的證書交換?驗證iOS應用程序

回答

3

如何使用私鑰/公鑰方案,以便iOS應用可以簽署它發送的每個請求?

如果私鑰/公鑰模式聽起來可怕,那麼通過使用sha1,sha2或其他加密哈希算法對您的加密隨機數進行哈希處理,可以輕鬆實現「簽名」您的請求的相同想法。這很容易實現(實現很容易獲得),速度很快,並且可以確保更高的安全級別。

1

我會建議使用OAuth。它是衆所周知和理解的,並且非常安全,並且在有人獲得您的令牌的情況下,您可以使用應用更新發布新消息並撤銷舊消息。

3

使用證書的TLS和SSL支持client authentication。 NSStream 可能支持客戶端認證,但我一直沒有找到辦法做到這一點,而不必放棄使用OpenSSL的實際實施。

增加:
ASIHTTPRequest支持client certificates從版本1.8開始,所以在實現它時不要大驚小怪。

+0

我實施了(可能以一種破半裂的方式)這是一個學校[項目](https:// github.com/paxswill/SecureGateway)上學期。感興趣的主要部分是[PXConnection](https://github.com/paxswill/SecureGateway/blob/master/SStore/Source/PXConnection.h)和[PXClient](https://github.com/paxswill) /SecureGateway/blob/master/AppGate/Source/PXClient.m)類。 – 2011-05-17 15:44:06

1

這是一個普通的http問題,不僅僅是一個iOS問題。實際上,這是https設計要解決的問題,或者至少是緩解問題。您可以對請求進行簽名,使用HMAC對消息進行身份驗證,使用摘要式身份驗證等,但只要您使用http,就不能輕易檢測到中間人攻擊。花時間儘可能快地轉向https。

0

這個問題是絕對不可能解決的。任何你放入你的方案的東西最終都可以通過越獄手機和在調試器中運行客戶端來破解。當然,這並不意味着你不能使用客戶端證書欺騙你的客戶變得更加困難,而且你也應該這樣做。但是,如果例如金融交易的安全取決於您的應用程序不可欺騙,那將是不好的...