隐藏来自提琴手的iOS HTTPS调用

我在我的iPhone应用程序中使用HTTPS与我自己的API进行通信。

我注意到,当我尝试在HTTPS上执行数据包嗅探时,它不会显示任何关键信息。 但是当我尝试Fiddler2,并在我的iPhone(这是由Fiddler2发出)上安装一个可信任的证书,我已经能够看到我所有的HTTPS电话! 这会造成严重的安全问题。

我已经尝试过与其他应用程序,其中一些甚至不会显示在提琴手任何东西,就好像他们保护自己不知何故!

我怎样才能保护我的申请?

谢谢


—所选解决scheme的额外信息—-

如果您正在使用AFNetworking,从版本1.1开始,您可以执行以下操作来解决问题:

将以下内容添加到您的PROJECT-Prefix.pch

#define _AFNETWORKING_PIN_SSL_CERTIFICATES_ =1 

确保你已经添加了安全框架,然后将其导入到AFURLConnectionOperation.m文件中

 #import <CommonCrypto/CommonDigest.h> 

将这个额外的function添加到文件中

 -(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; } 

replace这一行

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

与这一个

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

确保你已经计算出了服务器证书的SHA256,并在你的前缀文件中定义了这个值

 #define SSL_CERTIFICATE_SHA256 @"<certificate SHA256 value>" 

完成了!

所以你使用Fiddler2作为你的iPhone的代理。 所有的请求将通过提琴手。 提琴手将会像这是终点,并将返回您所信任的证书。 然后它会使用新的请求将请求转发到实际的URL。 因此它能够读取响应。 然后它会返回原始请求中的数据。 如果你想在你的应用程序中防止这个,那么你必须添加你自己的证书validation。 您可以在二进制级别检查证书或parsing证书并validation字段(如颁发者)

我发现这个教程与testing证书的信息http://www.inmite.eu/en/blog/20120314-how-to-validate-ssl-certificates-iOS-client也许这也可以帮助&#xFF1A; http:// www。 cocoanetics.com/2013/02/rfc-dtcertificateviewer/

您也可以通过添加您自己的注册图层来添加额外的安全级别。 服务器需要使用编写的数据进行响应,然后您将解密该响应。