苹果https方案

文章更新记录:

2017.07.12 - 添加实际应用过程错误记录

一、提出问题

苹果公司在2016的开发者大会上宣布:到2017年,所有的iOS应用都必须使用HTTPS与服务器进行通信。iOS开发者应该都不会对这个决定感到惊讶,因为自iOS9就已经引入了ATS(应用传输安全App Transport Security)特性,该特性对应用的安全传输做出了以下要求:

  • The protocol Transport Security Layer (TLS) must be at least version 1.2.
  • Connection ciphers are limited to those that provide forward secrecy (see the list of ciphers below.)
  • Certificates must use at least an SHA256 fingerprint with either a 2048 bit or greater RSA key, or a 256 bit or greater Elliptic-Curve (ECC) key.

不符合以上条件的任意一项,网络请求将会被中断并返回空值。

既然苹果公司划出了最后期限,HTTPS将成为必然,那么一个iOS开发自学者自然会提出以下问题:

HTTPS的原理和运行机制是什么?
为实现HTTPS通信,服务器端需要做什么?
为实现HTTPS通信,iOS客户端需要做什么?

二、HTTP 与Https的区别

这里用两张图来介绍两者的区别:HTTP:当客户端发送请求,那么服务器会直接返回数据。

HTTPS:当客户端第一次发送请求的时候,服务器会返回一个包含公钥的受保护空间(也成为证书),当我们发送请求的时候,公钥会将请求加密再发送给服务器,服务器接到请求之后,用自带的私钥进行解密,如果正确再返回数据。这就是 HTTPS 的安全性所在。


这里简介下SSL/TLS 的历史

1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
1996年,SSL 3.0版问世,得到大规模应用。
1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版[TLS](http://en.wikipedia.org/wiki/Secure_Sockets_Layer) 1.0版。
2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的[修订版](http://tools.ietf.org/html/rfc6176)。

TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

二、服务器端如何实现HTTPS

如何实现,肯定得靠自己搭建一个HTTPS服务器啊。根据网络上的资料,可知有两种方式来搭建HTTPS服务器:
一种是创建证书请求,然后到权威机构认证,随之配置到服务器;
一种是自建证书,然后配置给服务器。

  1. 第一种方式搭建的HTTPS服务器是最优的。建立网站的话,直接就会被信任。而服务器作为移动端app的服务器时,也不需要为ATS做过多的适配正是我所需要积累知识的方向)。虽然说权威的机构认证都是需要钱的,但是如今也不乏存在免费的第三方认证机构;
  2. 第二种方式搭建的HTTPS服务器,对于网站来说完全不可行,用户打开时直接弹出一个警告提醒,说这是一个不受信任的网站,让用户是否继续,体验很差,而且让用户感觉网站不安全。对于移动端来说,在iOS9出现之前,这个没什么问题,但是在iOS9出来之后,第二种方式是通不过ATS特性,需要在info.plist文件中将App Transport Security Settings中的Allow Arbitrary Loads设置为YES才行。

三、证书

前有很多免费和收费 ssl的证书提供商可以供我们选择,当然我们也可以自己作为颁发主体,制作ssl证书,不过像谷歌等浏览器对于不受信任的证书机构在页面上会给提示存在安全风险,阻止访问,这对用户体验来说是非常糟糕的。根据安全等级,当前ssl证书根据主要有以下几类:

  EV - 业界顶级SSL证书,部署了EV SSL证书的网站,地址栏会变成醒目的绿色,并且显示网站所属企业名称

  OV - 使用较为广泛的企业验证型SSL证书,部署了OV SSL证书之后,地址栏会有安全锁标识显示

  DV - 只验证域名,快速签发的SSL证书。也会在地址栏显示安全锁标识,但证书详情里面不显示O字段,不显示使用者名称,只显示域名

当前受到主流浏览器承认的很多SSL证书机构颁发的免费证书主要也都是DV等级。

八大免费SSL证书:给你的网站免费添加HTTPS加密

免费Letencrypt证书部署

这个是由国外发起的一个免费的ssl项目,现在已经得到了谷歌等主流浏览器的认可。从安全角度考虑,通过Letencrypt安装的免费证书只有三个月的有效期,到期之需要重新申请,但是这也给部署造成了一定的麻烦,所以官方也提供了各种自动化的解决方案

总结

本文主要是对Https相关资料进行收集,证书的两种生成方式:
1.创建证书请求,然后到权威机构认证,随之配置到服务器。有相关免费的证书颁发机构如Let's Encrypt 与 腾讯云
Let's Encrypt 下面有篇文章是专门讲怎么使用的。
Let's Encrypt 有效期为三个月,腾讯云有效期为1年。
2.自建证书,然后配置给服务器。

如腾讯云:

Paste_Image.png

采用第一种方案,app开发上不需要做任何修改。只要把原来的http请求改为https即可。
采用第二种方案,网页载入时会有不信任证书的不友好提示,app端需要更改网络请求代码以加入自己生成的密钥信息。

错误记录:

公司采用的阿里云的免费DV证书,工程将路径由http变为https

image.png

请求数据失败报一下错误
Error: Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=[https://localhost:4443/api/v0/login/salt](https://localhost:4443/api/v0/login/salt), NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=[https://localhost:4443/api/v0/login/salt](https://localhost:4443/api/v0/login/salt)}
用浏览器直接输入地址出现
QQ20170712-144255@2x.png

估计是证书不被信任导致,按照stackoverflow上的方法处理解决问题。

AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    mgr.requestSerializer.timeoutInterval = 20.0f;
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    securityPolicy.allowInvalidCertificates = YES;
    mgr.securityPolicy = securityPolicy;
    [securityPolicy setValidatesDomainName:NO];

后面问了下后台那边,说是证书是跟域名绑定,建议用域名直接访问。

image.png

改成域名后,AF无需任何改动直接访问即可。

在阿里云里申请免费Https证书SSL

参考文档:

iOS开发中的HTTPS
使用Let's Encrypt手动创建https证书

iOS开发中的HTTPS ---数字证书

iOS开发HTTPS实现之信任SSL证书和自签名证书

app ATS 验证

IOS Https适配摸索 一篇使用openSSl自己产生证书配置文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容