iOS 程序猿们要知道的一些 HTTPS 的事情...
Posted ZCLegendary
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 程序猿们要知道的一些 HTTPS 的事情...相关的知识,希望对你有一定的参考价值。
2017年1月1日起,苹果App Store中的所有App都必须启用 App Transport Security(ATS)安全功能。App Transport Security(应用程序安全传输),简称 ATS,是苹果在 ios 9 中首次推出的一项隐私安全保护功能,启用ATS后,它会屏蔽明文HTTP资源加载,强制App通过HTTPS连接网络服务,通过传输加密保障用户数据安全。
距离2017年剩下不到一个月的时间,如果连 HTTPS 还不了解,确实有些说不过去!这里把 HTTPS 相关的知识整理一下,博主小白,有什么疏漏或者不对的地方还望大家多多包涵加以指正!
HTTPS 也就是在 HTTP 的基础上,增加了一个 SSL协议,是 HTTP 的安全版.HTTPS 默认使用的端口号是443.
由此可见,HTTPS 最重要的还是这个"S",也就是 SSL 协议.
Secure socket layer(SSL)协议最初由Netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。随着时间的推移由于 Netscape 失去了市场份额,它将 SSL的维护工作移交给 IETF.第一个后Netscape版本被重新命名为安全传输层协议(TLS),TLS(Transport Layer Security:RFC 2246). 因此 SSL 协议有时也成为 TLS 协议,目前常用的是TLSv1.0的协议. 由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装数字证书,或服务器证书就可以激活服务器功能了。
SSL安全证书主要用于发送安全电子邮件、访问安全站点、网上招标与投标、网上签约、网上订购、安全网上公文传送、网上办公、网上缴费、网上缴税以及网上购物等安全的网上电子交易活动。
一.SSL证书可以实现几个基本功能
1.数据传输加密
2.数据传输的完整性
3.服务器身份证明
二.SSL证书常见类型
1.DVSSL:即域名型SSL安全证书,无需人工审核,快速颁发。
2.OVSSL:即企业型SSL安全证书,需要人工审核,证书包含企业认证信息。
3.EVSSL:即增强型SSL安全证书,人工审核严格,颁发之后可以使网站域名在浏览器地址栏变成绿色。
举两个例子
*腾讯云
这里会出现一个”小锁头 ”的样式,腾讯云采用了 https 协议,是OVSSL类型的证书.
*github
大家肯定会注意到,github 的 url 变绿了,说明 github 采用的是EVSSL类型的证书,并且该证书可以在浏览器的地址栏中显示公司名.
三.SSL协议在网络协议中的位置
那么 SSL 协议在所处的位置在哪呢?我们都知道,tcp/ip 协议处于网络模型(本例以 tcp/ip 四层模型为标准)的传输层,而 http 协议处于应用层,所以加密的过程肯定在传输层与应用层之间.
四.SSL协议的分层
SSL 协议是一个分层协议,共有两层组成.
高级层包括:
1.SSL 握手协议(SSL Handshake Protocol)
2.改变加密约定协议(Change Ciper Spec Protocol)
3.报警协议(Alert Protocol)
底层:
SSL 记录层协议(SSL Record Protocol)
五.SSL 协议的传输过程
接下来通过 Wirkshark 抓去 https 的数据包来分析客户端与服务端建立信任并传输数据的过程.
1.Client Hello
客户端发送所支持的 SSL/TLS 最高协议版本号、所支持的加密算法集合及压缩方法集合和随机数A等信息给服务器端。
2.Server Hello (1).服务器端收到客户端信息后,选定双方都能够支持的 SSL/TLS 协议版本和加密方法及压缩方法、 随机数B和服务器证书返回给客户端。
(2).服务器将自己的证书发给客户端
(3)Server Hello Done
3.客户端主动再生成一个随机数C,开始生成秘钥,这个生成秘钥的算法是客户端跟服务器端共享的,因为之前协商的时候已经确定了算法了,生成秘钥后就可以加密一段内容,试着跟服务区通信了,这个内容是经过先散列,散列后将原内容和散列集一起用刚才的密钥加密;接着用服务器端证书中的公钥对随机数C加密。
(1). Client 交换密钥数据包
(2).Server 通知 Client 之后的消息开始启用加密参数
4. 然后把加密过的内容和加密好的随机数一起发向服务器端。
5.服务器用私钥解密得到随机数C,这样服务器端也同时拥有了随机数A、B、C,即刻生成密钥,再用密钥对加密的内容进行解密,然后解开后对其中的明文内容进行散列,与客户端发过来的散列值进行比较,如果相等,说明就是客户端发过来的,通信成功。
6.用步骤3中同样的方式发一段加密过的内容给客户端。
7.用步骤5一样的方式对服务器发来的内容进行验证。
8.客户端确定开始通信。
9.服务端确定开始通信。
以上是关于iOS 程序猿们要知道的一些 HTTPS 的事情...的主要内容,如果未能解决你的问题,请参考以下文章