iPhoneアプリでHTTPSを使用して、自分のAPIと通信しています。
HTTPSでパケットスニッフィングを実行しようとすると、重要な情報が表示されないことに気付きました。しかし、Fiddler2を試し、iPhoneに信頼できる証明書(Fiddler2によって発行されたもの)をインストールすると、すべてのHTTPS呼び出しを確認できました!!! これは深刻なセキュリティ問題を引き起こす可能性があります。
私は他のアプリケーションでこれを試しましたが、それらのいくつかは、Fiddlerで何とかして自分自身を保護しているかのように何も表示しません!
アプリケーションを保護するにはどうすればよいですか?
ありがとう
---選択したソリューションへの追加情報----
AFNetworkingを使用している場合、バージョン1.1以降、問題を解決するために次の操作を実行できます。
PROJECT-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>"
終わり!