发表日期:2017-02 文章编辑:小灯 浏览次数:2544
2017.07.12 - 添加实际应用过程错误记录
苹果公司在2016的开发者大会上宣布:到2017年,所有的iOS应用都必须使用HTTPS与服务器进行通信。iOS开发者应该都不会对这个决定感到惊讶,因为自iOS9就已经引入了ATS(应用传输安全App Transport Security)特性,该特性对应用的安全传输做出了以下要求:
不符合以上条件的任意一项,网络请求将会被中断并返回空值。
既然苹果公司划出了最后期限,HTTPS将成为必然,那么一个iOS开发自学者自然会提出以下问题:
HTTPS的原理和运行机制是什么?
为实现HTTPS通信,服务器端需要做什么?
为实现HTTPS通信,iOS客户端需要做什么?
这里用两张图来介绍两者的区别: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服务器:
一种是创建证书请求,然后到权威机构认证,随之配置到服务器;
一种是自建证书,然后配置给服务器。
前有很多免费和收费 ssl的证书提供商可以供我们选择,当然我们也可以自己作为颁发主体,制作ssl证书,不过像谷歌等浏览器对于不受信任的证书机构在页面上会给提示存在安全风险,阻止访问,这对用户体验来说是非常糟糕的。根据安全等级,当前ssl证书根据主要有以下几类:
EV - 业界顶级SSL证书,部署了EV SSL证书的网站,地址栏会变成醒目的绿色,并且显示网站所属企业名称 OV - 使用较为广泛的企业验证型SSL证书,部署了OV SSL证书之后,地址栏会有安全锁标识显示 DV - 只验证域名,快速签发的SSL证书。也会在地址栏显示安全锁标识,但证书详情里面不显示O字段,不显示使用者名称,只显示域名
当前受到主流浏览器承认的很多SSL证书机构颁发的免费证书主要也都是DV等级。
八大免费SSL证书:给你的网站免费添加HTTPS加密
这个是由国外发起的一个免费的ssl项目,现在已经得到了谷歌等主流浏览器的认可。从安全角度考虑,通过Letencrypt安装的免费证书只有三个月的有效期,到期之需要重新申请,但是这也给部署造成了一定的麻烦,所以官方也提供了各种自动化的解决方案
本文主要是对Https相关资料进行收集,证书的两种生成方式:
1.创建证书请求,然后到权威机构认证,随之配置到服务器。有相关免费的证书颁发机构如Let's Encrypt 与 腾讯云
Let's Encrypt 下面有篇文章是专门讲怎么使用的。
Let's Encrypt有效期为三个月,腾讯云有效期为1年。
2.自建证书,然后配置给服务器。
如腾讯云:
采用第一种方案,app开发上不需要做任何修改。只要把原来的http请求改为https即可。
采用第二种方案,网页载入时会有不信任证书的不友好提示,app端需要更改网络请求代码以加入自己生成的密钥信息。
公司采用的阿里云的免费DV证书,工程将路径由http变为https
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)}
估计是证书不被信任导致,按照stackoverflow上的方法处理解决问题。
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; mgr.requestSerializer.timeoutInterval = 20.0f; AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; securityPolicy.allowInvalidCertificates = YES; mgr.securityPolicy = securityPolicy; [securityPolicy setValidatesDomainName:NO];
后面问了下后台那边,说是证书是跟域名绑定,建议用域名直接访问。
改成域名后,AF无需任何改动直接访问即可。
在阿里云里申请免费Https证书SSL
iOS开发中的HTTPS
使用Let's Encrypt手动创建https证书
iOS开发中的HTTPS ---数字证书
iOS开发HTTPS实现之信任SSL证书和自签名证书
app ATS 验证
IOS Https适配摸索 一篇使用openSSl自己产生证书配置文章
日期:2018-04 浏览次数:6658
日期:2017-02 浏览次数:3340
日期:2017-09 浏览次数:3537
日期:2017-12 浏览次数:3425
日期:2018-12 浏览次数:4677
日期:2016-12 浏览次数:4468
日期:2017-07 浏览次数:13540
日期:2017-12 浏览次数:3385
日期:2018-06 浏览次数:4162
日期:2018-05 浏览次数:4346
日期:2017-12 浏览次数:3466
日期:2017-06 浏览次数:3889
日期:2018-01 浏览次数:3836
日期:2016-12 浏览次数:3805
日期:2018-08 浏览次数:4331
日期:2017-12 浏览次数:3592
日期:2016-09 浏览次数:6283
日期:2018-07 浏览次数:3107
日期:2016-12 浏览次数:3125
日期:2018-10 浏览次数:3281
日期:2018-10 浏览次数:3370
日期:2018-09 浏览次数:3463
日期:2018-02 浏览次数:3484
日期:2015-05 浏览次数:3415
日期:2018-09 浏览次数:3209
日期:2018-06 浏览次数:3334
日期:2017-02 浏览次数:3778
日期:2018-02 浏览次数:4234
日期:2018-02 浏览次数:4038
日期:2016-12 浏览次数:3481
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.