【问题标题】:hiding iOS HTTPS calls from fiddler隐藏来自提琴手的 iOS HTTPS 调用
【发布时间】:2013-03-09 05:58:49
【问题描述】:

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

完成!

【问题讨论】:

  • 如何让您的设备使用 fiddler 代理?你在系统设置里配置了吗?
  • 我在我的电脑上运行了 Fiddler,并将我手机上的代理设置为指向我的电脑,然后我通过电子邮件将 Fiddler 提供的证书发送到我的 iPhone 并安装了它。
  • 2 票赞成这样一个深思熟虑的问题..

标签: iphone ios objective-c https


【解决方案1】:

因此,您使用 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/

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

【讨论】:

  • 请注意,任何拥有越狱手机的人都可以打败这一切。他们可以将调试器附加到应用程序,或者将其修改为不关心证书,用他们自己的证书替换您的证书,或者只是从应用程序内打印出流量。您无法知道只有您的应用程序正在连接到您的服务器。如果这对您来说是一个安全问题,那么您需要重新设计以使其不是安全问题,或者接受您有安全问题。请参阅stackoverflow.com/questions/9181186/… 了解更多信息。
  • 这并不是说上面不是一个合理的混淆添加。确实如此,并且出于各种其他原因,它对安全性有好处。但不要以为它正在保护您易受攻击的 API。 (在这一切中,我假设“安全问题”是指“您的信息的安全性。”如果您将该信息发送给客户,这是无法解决的。如果“安全问题”是指“安全性” 用户的信息”,那么这个问题有很多很好的解决方案,都是从验证用户开始的。)
猜你喜欢
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多