服务端的老大看到 17 年 1 月 1 日 Apple 强制提审的 app 必须是 HTTPS 的安全连接的消息之后就开始准备替换到 HTTPS 环境了,这两天我们在测试环境着手升级。
服务器端已经部署了 HTTPS 的测试环境
我的网络基础并不好,只了解一些皮毛, iOS 这边我查了一些博文,获得了一些东拼西凑的知识点,同时发现很多博文的内容本身也是东拼西凑的
现在我通过ATS 设置
和AFN 提供的安全设置
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy]; securityPolicy.allowInvalidCertificates = YES; [manager setSecurityPolicy:securityPolicy];
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>log.umsns.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> <key>sns.whalecloud.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> <key>qq.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/gt; <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>sina.com.cn</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>sinaimg.cn</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>sinajs.cn</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>sina.cn</key> <dict> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>weibo.cn</key> <dict> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>weibo.com</key> <dict> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict>
iOS 端能正常发出 HTTPS 请求,测试的时候用 fiddle 和 Charles 等代理软件在不配置证书的情况下无法抓到 HTTPS 请求包内容,配置证书后才能看到明文的请求内容
服务端使用的是腾讯云中申请的证书,免费版,但是属于非自建证书
非自建证书,我本地的工程中没有导入该证书,所以没有和 Trust Object 进行对比的步骤
目前 info.plist 文件中 NSAllowsArbitraryLoads 设置为 NO , HTTPS 请求也是可以成功的.(YES 也可以成功,据说设为 NO 是满足 Apple 要求的,设为 YES 就是允许 HTTP 请求)
![]() | 1 andyL OP - 服务端使用的是腾讯云中申请的证书,免费版,但是属于非自建证书 - 非自建证书,我本地的工程中没有导入该证书,所以没有和 Trust Object 进行对比的步骤 - 目前 info.plist 文件中 NSAllowsArbitraryLoads 设置为 NO , HTTPS 请求也是可以成功的.(YES 也可以成功,据说设为 NO 是满足 Apple 要求的,设为 YES 就是允许 HTTP 请求) |
![]() | 2 loveuqian 2016-12-13 17:40:20 +08:00 我记得之前看到一个测试证书能否过 store 检核的测试网站 好像是腾讯云的 找不到了 |
![]() | 3 alex321 2016-12-13 17:43:49 +08:00 ![]() |
4 caileijuve 2016-12-13 17:50:56 +08:00 只要能通过 HTTPS 发送和请求到数据应该就可以了 |
![]() | 5 alex321 2016-12-13 17:51:45 +08:00 @caileijuve 不行, ssl 协议版本有要求的。 |
11 814084764 2016-12-14 15:37:24 +08:00 苹果的强迫症又发作了。 |
![]() | 12 ZernonHuang 2016-12-16 00:44:42 +08:00 直接买一个受苹果信任的证书,客户端基本上不用做修改。 |
![]() | 13 andyL OP @ZernonHuang 是的,客户端只做了我提问中贴出的那些修改,以及 API 的 URL 前缀替换成带 HTTPS 的域名前缀。 |
![]() | 14 DingSoung 2016-12-20 19:07:27 +08:00 HTTPS 好说,就是一些第三方 SDK 还得弄,比如微信 QQ 微博分享 |