您的位置:首页 > 移动开发 > IOS开发

iOS中的弱SSL认证

2013-03-11 11:42 399 查看
在开发过程中,开发人员使用测试或自签名的 SSL 证书构建应用程序。 这样开发人员无需正式请求和验证 SSL 证书即可测试 HTTPS 功能。 然而,大多数情况下会保留使用自签名证书的代码,这会导致基于 HTTPS 的 Man-In-The-Middle (MITM) 攻击。

以下代码允许所有 HTTPS 连接的任意 HTTPS 证书

//NSURLRequest+IgnoreSSL.h
@interface NSURLRequest (IgnoreSSL)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;

@end
//NSURLRequest+IgnoreSSL.m
implementation NSURLRequest (IgnoreSSL)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}

@end

也可通过调用私有方法setAllowsAnyHTTPSCertificate,设置为YES,来绕过SSL认证

@interface NSURLRequest (DummyInterface)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
@end
[NSURLRequest setAllowsAnyHTTPSCertificate: YES forHost:[payURL host]];


一般对HTTPS实施中间人攻击是在http协议转为https协议过程中切入,攻击者代理客户端与服务器进行https加密通信,攻击者再把加密的信息解密后直接以http协议跟客户端通信。但这很容易通过地址栏识别。如果允许所有 HTTPS 连接的任意 HTTPS 证书,攻击者就可以伪造证书。以下是一个Java实现的中间人代理研究模型,它与https服务器建立https连接,得到认证证书,并伪造该证书发送给客户端,如果客户端信任该伪造该证书,则该中间人代理研究模型就能控制客户端和服务器的所有通信。

以下是使用它代理修改CSDN个人资料的截图:





添加了该伪造证书,看起来还真像





如果你已经启用了https协议,那就不要因为偷一下懒或图方便去使用弱SSL认证,中间人代理攻击就会让你的https安全协议屁都不是。

参考

[1]. 中间人代理攻击的Java研究模型 http://crypto.stanford.edu/ssl-mitm/
[2].https://www.owasp.org/index.php/Man-in-the-middle_attack
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息