YTKNetWork https 适配

作者: hehtao | 来源:发表于2016-12-08 16:07 被阅读6403次

    ------非自签名证书配置------------#

    要求环境:

    服务器:
    1.支持TLS1.2 ;
    2.使用支持forward secrecy协议密码;
    3.证书要求符合 ATS规定;
    4.域名符合ATS要求;
    iOS端: 配置AFSecurityPolicy即可;

    关于服务器的要求解释:

    TLS1.2 和    forward secrecy协议就不说了,自行百度; 加密算法要求最低 SHA2 或 RSA;```
    ####什么样的证书才是符合ATS要求的呢?
    

    当然是经过知名CA认证的. 说简单点就是花钱买的,价格几百到几千不等(吐槽一下,我们4W/年) ```

    什么样的域名才是符合要求的呢?

    这个比较简单,终端一条命令搞定,像这样:nscurl --ats-diagnostics --verbose https://xxxxxx.com    xxxxx.com 就是你的域名啦,执行完出现下面界面,全是 pass 就对了,如果出现failed ,看看是哪一项,找服务器扯皮吧.
    
    Snip20161208_1.png

    关于iOS端的配置:

    // YTKNetWork 的配置
    -(void)configHttps{
        
        // 获取证书
        NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"baidu" ofType:@"cer"];//证书的路径
        NSData *certData = [NSData dataWithContentsOfFile:cerPath];
        
        // 配置安全模式
        YTKNetworkConfig *config = [YTKNetworkConfig sharedConfig];
        
        config.baseUrl = k_BASE_URL;
        //    config.cdnUrl = @"http://fen.bi";
        
        // 验证公钥和证书的其他信息
        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
        
        // 允许自建证书
        securityPolicy.allowInvalidCertificates = YES;
        
        // 校验域名信息
        securityPolicy.validatesDomainName      = YES;
        
        // 添加服务器证书,单向验证;  可采用双证书 双向验证;
        securityPolicy.pinnedCertificates       = [NSSet setWithObject:certData];
        
        [config setSecurityPolicy:securityPolicy];
        
    }
    

    到此基本完成,来讲讲中间的坑:

    1.error 1004 :cannot connect server ;
    错误描述: iOS9 报错1004 ,而iOS8和10 都没问题;
    解决办法: 明显是证书验证不过,问了服务器,说用的测试自建证书,换完之后出现 -1016
    2.error 1006: content-Type ;text/html
    错误描述:error 1006
    解决办法: 用的YTKNetWork修改contentType比较费劲,AFN很容易,如下:

    _manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json",@"text/json",@"text/xml",nil];
    

    使用 YTK 遇到同样问题的朋友,可以参考本人另一篇博文:黑科技 扩展 YTKNetWork 对text/html的支持

    1. 修改完error 3840 code 404,又出问题了,
      错误描述:error code 3840, 英文翻译: 返回数据格式不是集合,无法解析;
      解决办法: 尝试直接访问服务器开发人员主机,结果OK;访问 https://xxxx.com 报错3840,后来一番查找,发现域名没有备案,公司去备案域名;
      改用测试服务器,换了ip 地址和端口号, 终于OK了;

    -----自签名证书配置-------#

    参考:iOS用自签名证书实现HTTPS请求的原理实例讲解

    相关文章

      网友评论

      • 充电星球:你好,https没用自签证书要怎么设置呢?我这边报3840的错误

      本文标题:YTKNetWork https 适配

      本文链接:https://www.haomeiwen.com/subject/wersmttx.html