AFNetworking 使用HTTPS请求 添加证书

来源:互联网 发布:js设置input必填 编辑:程序博客网 时间:2024/06/05 19:52

转自:http://www.cocoachina.com/bbs/read.php?tid=1709063




017年1月1号之后  苹果所有应用必须https 我按照网上的方法
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
+ (void)post:(NSString*)url params:(NSDictionary*)params success:(void(^)(id))success failure:(void(^)(NSError*))failure
{
    // 1.获得请求管理者
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    // 2.申明返回的结果是text/html类型
    mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
    // 3.设置超时时间为10s
    mgr.requestSerializer.timeoutInterval = 10;
     
    // 加上这行代码,https ssl 验证。
    if(openHttpsSSL)
    {
        [mgr setSecurityPolicy:[selfcustomSecurityPolicy]];
    }
     
    // 4.发送POST请求
    [mgr POST:url parameters:params
      success:^(AFHTTPRequestOperation *operation, idresponseObj) {
          if(success) {
              success(responseObj);
          }
      } failure:^(AFHTTPRequestOperation *operation, NSError*error) {
          if(failure) {
              failure(error);
          }
      }];
}
 
+ (AFSecurityPolicy*)customSecurityPolicy
{
    // /先导入证书
    NSString*cerPath = [[NSBundlemainBundle] pathForResource:@"120.76.245.127.cer"ofType:nil];
    NSData*certData = [NSDatadataWithContentsOfFile:cerPath];
     
    // AFSSLPinningModeCertificate 使用证书验证模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
     
    // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
    // 如果是需要验证自建证书,需要设置为YES
    securityPolicy.allowInvalidCertificates = YES;
     
    //validatesDomainName 是否需要验证域名,默认为YES;
    //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
    //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是<a href="\"http://www.google.com\"" target="\"_blank\"" onclick="\"return" checkurl(this)\"="" id="\"url_1\"">www.google.com</a>,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
    //如置为NO,建议自己添加对应域名的校验逻辑。
    securityPolicy.validatesDomainName = NO;
     
    securityPolicy.pinnedCertificates = @[certData];
     
     
    returnsecurityPolicy;
}


我发现在ios9系统是可以访问成功的,在ios7返回code -1004 麻烦各位大神告诉我怎么处理? 

0 0
原创粉丝点击