2013-03-07 81 views
2

我用了我的iPhone應用程序的HTTPS用我自己的API調用來通信。隱藏的iOS HTTPS從小提琴手

我注意到,當我嘗試做數據包嗅探上的HTTPS它不會顯示任何關鍵信息。但是當我嘗試Fiddler2並在我的iPhone(由Fiddler2發佈)上安裝了受信任的證書時,我已經能夠看到我所有的HTTPS調用了!這可能導致嚴重的安全問題。

我與其他應用程序嘗試這樣做,因爲如果他們以某種方式保護自己有些人不會出現,即使在提琴手的東西!

怎麼能保護我的應用程序?

感謝


---額外的信息,所選擇的解決方案----

如果你正在使用AFNetworking,從1.1版本開始,你可以做以下解決問題:

以下內容添加到您的項目,Prefix.pch

#define _AFNETWORKING_PIN_SSL_CERTIFICATES_ =1 

確保你已經添加的安全框架,然後將它導入在AFURLConnectionOperation.m文件

#import <CommonCrypto/CommonDigest.h> 

添加這個額外的功能將文件

-(NSString*) sha256:(NSString*)input 
{ 
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; 
    NSData *data = [NSData dataWithBytes:cstr length:input.length]; 

    uint8_t digest[CC_SHA256_DIGEST_LENGTH]; 

    CC_SHA256(data.bytes, data.length, digest); 

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; 

    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) 
     [output appendFormat:@"%02x", digest[i]]; 

    return output; 
} 

替換該行

if ([[[self class] pinnedCertificates] containsObject:certificateData]) 

與此一

if ([[self sha256:[certificateData description]] isEqualToString:SSL_CERTIFICATE_SHA256]) 

確保你已經計算的服務器證書的SHA256和前綴文件

#define SSL_CERTIFICATE_SHA256 @"<certificate SHA256 value>" 

進行定義的價值!

+0

你如何讓你的設備使用提琴手代理?你有沒有在系統設置中配置它? – occulus 2013-03-07 18:26:53

+1

我在我的電腦上運行了Fiddler,並將手機上的代理設置爲指向我的電腦,然後我通過電子郵件將由Fiddler提供的證書發送到我的iPhone並安裝它。 – Kassem 2013-03-08 14:01:11

+1

2 upvotes這樣一個深思熟慮的問題.. – 2014-01-02 06:28:10

回答

3

所以你正在使用Fiddler2爲你的iPhone的代理。所有的請求將通過提琴手。提琴手將會像這是終點,並將返回您所信任的證書。然後它會使用新的請求將請求轉發到實際的URL。因此它能夠讀取響應。然後它將返回原始請求中的數據。如果您想在應用程序中防止這種情況發生,那麼您必須添加自己的證書驗證。你可以檢查二進制級別的證書或分析證書和驗證領域(如發行人)

我發現了有關測試證書的信息,本教程http://www.inmite.eu/en/blog/20120314-how-to-validate-ssl-certificates-iOS-client 或許這也可以幫助:http://www.cocoanetics.com/2013/02/rfc-dtcertificateviewer/

您還可以添加通過添加您自己的註冊圖層來提供額外的安全級別。服務器需要使用腳本數據進行響應,然後您將解密該響應。

+1

請注意,所有這些都可以被越獄手機的任何人擊敗。他們可以將調試器附加到應用程序中,將其修改爲不關心證書,用自己的證書替換您的證書,或者僅打印應用內的流量。您無法知道只有您的應用程序連接到您的服務器。如果這對您來說是一個安全問題,那麼您需要重新設計,以免它出現安全問題,或者接受您遇到安全問題。有關更多信息,請參閱http://stackoverflow.com/questions/9181186/secure-https-encryption-for-iphone-app-to-webpage。 – 2013-03-08 22:03:20

+0

這並不是說上面的內容不是一個合理的添加混淆片段。這是,並且由於各種其他原因,這對安全性很好。但不要設想它會保護您的易受攻擊的API。 (在我所說的「安全問題」中,你的意思是「你的*信息的安全性」。如果你把這些信息發送給客戶端,那麼這是不可解的。如果你認爲「安全問題」信息「,那麼這個問題有很多很好的解決方案,都是從驗證用戶開始的。) – 2013-03-08 22:04:49