AFNetworking 2.x 的SSL身份认证

一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探

其实这么做的话还是不够的.我们还需要防止中间人攻击(不明白的自己去百度)。攻击者通过伪造的ssl证书使app连接到了伪装的假冒的服务器上,这是个严重的问题!

那么如何防止中间人攻击呢?

首先web服务器必须提供一个ssl证书,需要一个 .crt 文件,然后设置app只能连接有效ssl证书的服务器。

在开始写代码前,先要把 .crt 文件转成 .cer 文件,然后在加到xcode 里面

openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der

如果你用的是NSURLConnection,你需要这样检查证书,必须添加一个 NSURLConnectionDelegate  

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

用 AFNetworking 2.x的话就简单多了,只需要添加一个AFSecurityPolicy 和 setAFHTTPRequestOperationManager

要经常用的话,推荐写一个方法,然后以后用就可以复制黏贴了

AFNetworking 2.x 的SSL身份认证
- (AFSecurityPolicy*)customSecurityPolicy
{
    /**** SSL Pinning ****/
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的证书" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
    [securityPolicy setAllowInvalidCertificates:NO];
    [securityPolicy setPinnedCertificates:@[certData]];
    [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate];
    /**** SSL Pinning ****/

    return securityPolicy;
}
AFNetworking 2.x 的SSL身份认证

 

 然后在管理器里这么设置

 

 

AFNetworking 2.x 的SSL身份认证
 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    /**** SSL Pinning ****/
    [manager setSecurityPolicy:[self customSecurityPolicy]];
    /**** SSL Pinning ****/
    
    [manager GET:@"网站的url" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary* responseObject) {
        //这里是你自己的代码了
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //注释同上
 }];
AFNetworking 2.x 的SSL身份认证

 

文章地址:http://www.cnblogs.com/koujiaonuhan/p/ssl-pinning-with-afnetworking-2x.html

 

 

 

AFNetworking 2.x 的SSL身份认证,布布扣,bubuko.com

AFNetworking 2.x 的SSL身份认证

上一篇:CSS选择符类型


下一篇:mybatis延迟加载,及其实现原理