我在我的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>"
完成!
答案 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/
您还可以通过添加自己的编码层来添加额外的安全级别。服务器需要使用入站数据进行响应,然后您将解密该响应。