YTKNetWork https 适配

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

要求环境:

服务器:
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 ,看看是哪一项,找服务器扯皮吧.
YTKNetWork https 适配_第1张图片
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请求的原理实例讲解

你可能感兴趣的:(YTKNetWork https 适配)