【发布时间】: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