**关于升级到 HTTPS 的讨论**

2016-12-13 16:50:40 +08:00
 andyL

背景

服务端的老大看到 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/>
				<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 请求包内容,配置证书后才能看到明文的请求内容

问题

4919 次点击
所在节点    iDev
15 条回复
andyL
2016-12-13 17:23:11 +08:00
- 服务端使用的是腾讯云中申请的证书,免费版,但是属于非自建证书
- 非自建证书,我本地的工程中没有导入该证书,所以没有和 Trust Object 进行对比的步骤
- 目前 info.plist 文件中 NSAllowsArbitraryLoads 设置为 NO , HTTPS 请求也是可以成功的.(YES 也可以成功,据说设为 NO 是满足 Apple 要求的,设为 YES 就是允许 HTTP 请求)
loveuqian
2016-12-13 17:40:20 +08:00
我记得之前看到一个测试证书能否过 store 检核的测试网站
好像是腾讯云的
找不到了
alex321
2016-12-13 17:43:49 +08:00
caileijuve
2016-12-13 17:50:56 +08:00
只要能通过 HTTPS 发送和请求到数据应该就可以了
alex321
2016-12-13 17:51:45 +08:00
@caileijuve 不行, ssl 协议版本有要求的。
andyL
2016-12-13 17:52:06 +08:00
@alex321 @loveuqian 这个检测我做过了,是通过了的。
现在就是 iOS 客户端这边 这种做法不知道对不对
alex321
2016-12-13 17:54:13 +08:00
@andyL 等元旦吧。。这东西都是程序处理的,提交的时候如果有问题应该会有提示。
andyL
2016-12-13 17:55:48 +08:00
@alex321 确实, Apple 的审核标准目前并没有十分明确
loveuqian
2016-12-13 17:58:10 +08:00
@andyL
不着急,我们的图片储存还没转到 HTTPS
圣诞前再更一版,剩下的就看明年会怎么样了
andyL
2016-12-13 18:02:08 +08:00
@loveuqian 嗯,我们的图片存储也没有使用 HTTPS ,不过已经在弄了。
814084764
2016-12-14 15:37:24 +08:00
苹果的强迫症又发作了。
ZernonHuang
2016-12-16 00:44:42 +08:00
直接买一个受苹果信任的证书,客户端基本上不用做修改。
andyL
2016-12-16 10:01:27 +08:00
@ZernonHuang 是的,客户端只做了我提问中贴出的那些修改,以及 API 的 URL 前缀替换成带 HTTPS 的域名前缀。
DingSoung
2016-12-20 19:07:27 +08:00
HTTPS 好说,就是一些第三方 SDK 还得弄,比如微信 QQ 微博分享
andyL
2016-12-21 13:48:16 +08:00
@dingsoung 这些第三方的 SDK 已经全部更新过了,相信他们会跟进对 HTTPS 的支持的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/327370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX