信息网站大全,涿州李战彪,wordpress站点管理员,能自己做游戏的软件一切为了迎合苹果 在WWDC 2016开发者大会上#xff0c;苹果宣布了一个最后期限#xff1a;到2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能。App Transport Security#xff08;ATS#xff09;是苹果在iOS 9中引入的一项隐私保护功能…一切为了迎合苹果 在WWDC 2016开发者大会上苹果宣布了一个最后期限到2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能。App Transport SecurityATS是苹果在iOS 9中引入的一项隐私保护功能屏蔽明文HTTP资源加载连接必须经过更安全的HTTPS。苹果目前允许开发者暂时关闭ATS可以继续使用HTTP连接但到年底所有官方商店的应用都必须强制性使用ATS。但如果2017年1月1日起您仍一意孤行那么在Apple Store中您的App将不能被用户下载使用。 兼容HTTP
新特性要求App内访问的网络必须使用HTTPS协议。 但是现在公司的项目使用的是HTTP协议使用私有加密方式保证数据安全。现在也不能马上改成HTTPS协议传输需要兼容下HTTP。 网络请求报错The resource could not be loaded because the App Transport Security policy require
所以先兼容下http
在Info.plist中添加NSAppTransportSecurity类型Dictionary。在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES为了适配webView中的http链接在NSAppTransportSecurity下添加Allow Arbitrary Loads in Web Content类型Boolean,值设为YES
适配HTTPS
iOS开发者来说需要尽早解决HTTPS请求的问题。
发送HTTPS请求信任SSL证书和自签名证书分为三种情况
较少的公司如果你的app服务端安装的是SLL颁发的CA可以使用系统方法直接实现信任SSL证书关于Apple对SSL证书的要求请参考苹果官方文档CertKeyTrustProgGuide 示例代码
NSURL *URL [NSURL URLWithString:URLString];NSURLRequest *request [[NSURLRequest alloc] initWithURL:URL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];//创建同步连接NSError *error nil;NSData *receivedData [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:error]; NSString *receivedInfo [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
大部分公司基于AFNetWorking的SSL特定服务器证书信任处理使用自签名证书认证重写AFNetWorking的customSecurityPolicy方法。 ###验证证书步骤从服务器要来.crt格式的证书然后用Mac钥匙串打开然后导出 .cer格式的证书
把.cer证书导入程序的 中。验证证书的代码
/**https证书验证*/
(AFSecurityPolicy*)customSecurityPolicy
{// /先导入证书NSString *cerPath [[NSBundle mainBundle] pathForResource:test ofType:cer];//证书的路径NSData *certData [NSData dataWithContentsOfFile:cerPath];// AFSSLPinningModeCertificate 使用证书验证模式 (AFSSLPinningModeCertificate是证书所有字段都一样才通过认证AFSSLPinningModePublicKey只认证公钥那一段AFSSLPinningModeCertificate更安全。但是单向认证不能防止“中间人攻击”)AFSecurityPolicy *securityPolicy [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];// allowInvalidCertificates 是否允许无效证书也就是自建的证书默认为NO// 如果是需要验证自建证书需要设置为YESsecurityPolicy.allowInvalidCertificates YES;//validatesDomainName 是否需要验证域名默认为YES//假如证书的域名与你请求的域名不一致需把该项设置为NO如设成NO的话即服务器使用其他可信任机构颁发的证书也可以建立连接这个非常危险建议打开。//置为NO主要用于这种情况客户端请求的是子域名而证书上的是另外一个域名。因为SSL证书上的域名是独立的假如证书上注册的域名是www.google.com那么mail.google.com是无法验证通过的当然有钱可以注册通配符的域名*.google.com但这个还是比较贵的。//如置为NO建议自己添加对应域名的校验逻辑。securityPolicy.validatesDomainName NO;securityPolicy.pinnedCertificates (NSSet *)[certData];return securityPolicy;
}
其中的cerPath就是app bundle中证书路径certificate为证书名称的宏仅支持cer格式securityPolicy的相关配置尤为重要请仔细阅读customSecurityPolicy方法并根据实际情况设置其属性。 这样就能够在AFNetWorking的基础上使用HTTPS协议访问特定服务器但是不能信任根证书的CA文件因此这种方式存在风险读取pinnedCertificates中的证书数组的时候有可能失败如果证书不符合certData就会为nil。 在发送请求时候 加上这行代码https ssl 验证。
// [[AFHTTPSessionManager manager] setSecurityPolicy:[JYAFNetworkingManager customSecurityPolicy]];
更改系统方法发送异步NSURLConnection请求。 这种方式用的很少就不多介绍了有新区可以自行搜索
大部分可以参考 http://www.jianshu.com/p/f312a84a944c http://www.jianshu.com/p/6b9c8bd5005a http://www.jianshu.com/p/b03ae4a1a2d3