隐藏来自fiddler的iOS HTTPS调用

时间:2013-03-07 12:50:57

标签: iphone ios objective-c https

我在我的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>"

完成!

1 个答案:

答案 0 :(得分:3)

所以你使用Fiddler2作为iPhone的代理。然后所有请求都将通过提琴手。 Fiddler将表现得像是终点,并将返回您信任的证书。然后它将使用新请求将请求转发到实际URL。因此,它能够读取响应。然后它将返回原始请求中的数据。如果要在应用程序中阻止此操作,则必须添加自己的证书验证。您可以在二进制级别检查证书或解析证书并验证字段(如发行者)

我在本教程中找到了有关测试证书的信息http://www.inmite.eu/en/blog/20120314-how-to-validate-ssl-certificates-iOS-client 也许这也有帮助:http://www.cocoanetics.com/2013/02/rfc-dtcertificateviewer/

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