1. 一.项目中的网络交互都是基于AFN,要求AFN版本在3.0及其以上;
  2. 二.代码部分
  3. 设置AFN请求管理者的时候 添加 https ssl 验证。
  4. // 1.获得请求管理者
  5. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  6. // 2.加上这个函数,https ssl 验证。
  7. [manager setSecurityPolicy:[self customSecurityPolicy]];
  8. // https ssl 验证函数
  9. - (AFSecurityPolicy *)customSecurityPolicy {
  10. // 先导入证书 证书由服务端生成,具体由服务端人员操作
  11. NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//证书的路径
  12. NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
  13. // AFSSLPinningModeCertificate 使用证书验证模式
  14. AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  15. // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  16. // 如果是需要验证自建证书,需要设置为YES
  17. securityPolicy.allowInvalidCertificates = YES;
  18. //validatesDomainName 是否需要验证域名,默认为YES;
  19. //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  20. //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  21. //如置为NO,建议自己添加对应域名的校验逻辑。
  22. securityPolicy.validatesDomainName = NO;
  23. securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil nil];
  24. return securityPolicy;
  25. }
  26. 三.关于证书 参考文章:http://www.2cto.com/Article/201510/444706.html
  27. 服务端给的是crt后缀的证书,其中iOS客户端用到的cer证书,是需要开发人员转换:
  28. 1.证书转换
  29. 在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句
  30. openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der
  31. 这样你就可以得到cer类型的证书了。双击,导入电脑。
  32. 2.证书放入工程
  33. 1、可以直接把转换好的cer文件拖动到工程中。
  34. 2、可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出.cer文件的证书了
  35. 或者直接在你网站上下载 例如:kyfw.12306.cn:443的:
  36. openssl s_client -connect kyfw.12306.cn:443 </dev/null 2>/dev/null | openssl x509 -outform DER > myWebsite.cer
  37. 参考链接:http://www.jianshu.com/p/97745be81d64。
  38. 四.在info.plist去掉之前允许http加载的代码 就是删除下面的代码(么有的就省了这一步)
  39. <key>NSAppTransportSecurity</key>
  40. <dict>
  41. <key>NSAllowsArbitraryLoads</key>
  42. <true/>
  43. </dict>
[objc]  view plain copy
  1. 一、
  2. 2017年1月1日起所有提交到 App Store 的App必须强制开启 ATS。
  3. 就是要求去掉 Info.plist 的 NSAllowsArbitraryLoads
  4. 1.这要求所有通过APP发送的网络请求都需要https
  5. 2.开启ATS,图片(例如图像的URL)等静态文件的url需要用https,否则会无法加载;
  6. 3.对于H5,网页浏览和视频播放的行为,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent 键。通过将它设置为 YES ,
  7. 可以让你的 app 中的 WKWebView 和使用 AVFoundation 播放的在线视频不受 ATS 的限制。
  8. 这也应该是绝大多数使用了相关特性的 app 的选择。但是坏消息是这个键在 iOS 9 中并不会起作用.
  9. 4.iOS9中可以选择使用 NSExceptionDomains 来针对特定的域名开放 HTTP 应该要相对容易过审核。“需要访问的域名是第三方服务器,他们没有进行 HTTPS 对应”会是审核时的一个可选理由,但是这应该只需要针对特定域名,而非全面开放。如果访问的是自己的服务器的话,可能这个理由会无法通过。是需要在Info.plist 配置中的XML源码
  10. <key>NSAppTransportSecurity</key>
  11. <dict>
  12. <key>NSExceptionDomains</key>
  13. <dict>
  14. <key>XXX.com</key>
  15. <dict>
  16. <!--适用于这个特定域名下的所有子域-->
  17. <key>NSIncludesSubdomains</key>
  18. <true/>
  19. <!--扩展可接受的密码列表:这个域名可以使用不支持 forward secrecy 协议的密码-->
  20. <key>NSExceptionRequiresForwardSecrecy</key>
  21. <false/>
  22. <!--允许App进行不安全的HTTP请求-->
  23. <key>NSExceptionAllowsInsecureHTTPLoads</key>
  24. <true/>
  25. <!--在这里声明所支持的 TLS 最低版本-->
  26. <key>NSExceptionMinimumTLSVersion</key>
  27. <string>TLSv1.1</string>
  28. </dict>
  29. </dict>
  30. </dict>
  31. 二、
  32. 目前项目中用到的第三方已经支持https的有
  33. WKWebView
  34. UIWebView
  35. SDWebImage
  36. 支付宝SDK
  37. 微信支付SDK
  38. 友盟SDK
  39. 极光推送SDK
  40. 其中用到的UIWebView 以后要逐步替换为WKWebView
如果报错
Error Domain=NSURLErrorDomain Code=-1200 "发生了 SSL 错误,无法建立与该服务器的安全连接。" UserInfo={NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x15dd87140>, NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, NSErrorPeerCertificateChainKey=<CFArray 0x15df6b640 [0x1a08d5150]>{type = immutable, count = 1, values = (
0 : <cert(0x15f3559e0) s: dbh i: dbh>
)}, NSUnderlyingError=0x15dd5f770 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x15dd87140>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=<CFArray 0x15df6b640 [0x1a08d5150]>{type = immutable, count = 1, values = (
0 : <cert(0x15f3559e0) s: dbh i: dbh>
)}}}, NSLocalizedDescription=发生了 SSL 错误,无法建立与该服务器的安全连接。, NSErrorFailingURLKey=https://192.168.1.138/app/login/login.json, NSErrorFailingURLStringKey=https://192.168.1.138/app/login/login.json, NSErrorClientCertificateStateKey=0}
可能是服务器配置的证书不对,苹果要求是TLS1.2,服务端配置是TLS1.0。
也有可能是后台签名算法问题 https://my.oschina.net/vimfung/blog/494687

iOS适配https参考链接: https://github.com/ChenYilong/iOS9AdaptationTips

证书生成的参考链接:http://www.2cto.com/Article/201510/444706.html

证书转换的参考链接:http://www.jianshu.com/p/97745be81d64

最新 配置Https 2017年1月1日起所有提交到 App Store 的App必须强制开启 ATS相关推荐

  1. eNSP使用介绍,VRP基础配置(2017年12月18日 17:43:53)

    pwd:查看所处路径 Idx:索引 drw:d--direc 代表这不是一个文件,是一个子文件夹    没有d的就是个具体的文件.r:可读  w:可以修改 直接dir只能查看所在的目录的文件.看其他的 ...

  2. 最新手机号段归属地数据库(2017年4月16日版)免费下载

    2017年4月16日版   360569条记录 最新 手机号段数据库 号码归属地数据库  移动号段 联通号段 电信号段 14号段 170号段(虚拟运营商)    权威  全面  准确  规范 字段包括 ...

  3. 第四范式陈雨强:万字深析工业界机器学习最新黑科技 By 机器之心2017年7月25日 16:38 近日,全球最顶级大数据会议 Strata Data Conference 在京召开。Strata 大

    第四范式陈雨强:万字深析工业界机器学习最新黑科技 By 机器之心2017年7月25日 16:38 近日,全球最顶级大数据会议 Strata Data Conference 在京召开.Strata 大会 ...

  4. 手机号码段简介以及最新手机号段归属地数据库(2017年6月28日)

    什么是手机号码段? 我国使用的手机号码为11位,其中各段有不同的编码方向:前3位-网络识别号:第4-7位-地区编码:第8-11位-用户号码.号码也就是所谓的MDN号码,即本网移动用户作被叫时,主叫用户 ...

  5. 2017年度盘点:15个最流行的GitHub机器学习项目 By 机器之心2017年12月21日 15:23 在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学、机

    2017年度盘点:15个最流行的GitHub机器学习项目 By 机器之心2017年12月21日 15:23 在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学.机 ...

  6. 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 109 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCogn

    实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 标签: 109 编辑 删除 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 ...

  7. 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了

    中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了 E ...

  8. 2017年05月13日勒索软件, 勒索病毒(WannaCry)肆虐全球, 中国安全防线严重受挫

    [简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 个人网站: https://www.x86asm.org QQ交流: 643439947 编程生涯: 2001年~至今[共16年] 职业 ...

  9. 关于iOS 10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS的方法

    iOS 10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS,也就是说强制我们用HTTPS,如果不这样的话提交App可能会被拒绝.但是我们可以通过NSExceptionDomains来针对特 ...

  10. 数据挖掘笔记2017年3月1日-

    2017年3月1日 1.使用ggplot2进行高级绘图 1.在ggplot2中,图是采用串联起来(+)号函数创建的,每个函数属于自己的部分. library(ggplot2) ggplot(data= ...

最新文章

  1. spring源码分析之spring-web remoting模块概况及基本概念
  2. php和mysql函数的区别吗,(PHP,MySQL)函数仅在2种情况中的1种有效,找不到区别
  3. Windows 编程
  4. UVA 2474 - Balloons in a Box 爆搜
  5. 02使用常规步骤编译NanoPiM1Plus的Android4.4.2
  6. HDU - 2018 母牛的故事
  7. 把CS文件编译成dll文件
  8. [软件更新]暴风影音2009最新特别版光盘免费赠送(暴风门特别版)
  9. 所有ghost操作系统大全
  10. 域的基本管理:统一公司部门桌面
  11. VS2017编译SQLite3生成.lib
  12. 自动化测试面试题及答案,看完后吊打面试官!
  13. 电梯控制技术综合实训装置QY-DT721
  14. CDGA:应聘数仓岗,选择企业级别 or 算法团队?
  15. windows磁盘管理
  16. 图像风格迁移-DSTN
  17. 基于jsp+mysql+ssm妇女联合会管理系统-计算机毕业设计
  18. 如何在万网购买一个属于自己的域名
  19. 关闭Xshell的提示音
  20. [TCL]Tcl语言基礎教程(二)

热门文章

  1. cx_oracle版本,python用cx_Oracle连接oracle
  2. package关键字
  3. 散射噪声仿真理论和实践(理论篇1)
  4. 新建项目打开之后就是一片空白,请问怎么解决啊
  5. 登录框,密码和确认密码的输入框中不能复制,粘贴,剪切,和右键。 禁打印。禁下载。
  6. PostMan 系列1---对API 发送请求方法
  7. 树莓派笔记:通过BaiduPSC-Go操作百度网盘
  8. 吴恩达深度学习笔记——序列模型与循环神经网络(Sequence Models)
  9. 中国式的开放平台遭遇尴尬式的价值体现
  10. indirect quotation direct quotation