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安全证书,人工审核严格,颁发之后可以使网站域名在浏览器地址栏变成绿色。


举两个例子

*腾讯云

iOS sstp协议实现 iphone sstp_随机数

这里会出现一个”小锁头 ”的样式,腾讯云采用了 https 协议,是OVSSL类型的证书.


*github

iOS sstp协议实现 iphone sstp_SSL_02

大家肯定会注意到,github 的 url 变绿了,说明 github 采用的是EVSSL类型的证书,并且该证书可以在浏览器的地址栏中显示公司名.

三.SSL协议在网络协议中的位置



那么 SSL 协议在所处的位置在哪呢?我们都知道,tcp/ip 协议处于网络模型(本例以 tcp/ip 四层模型为标准)的传输层,而 http 协议处于应用层,所以加密的过程肯定在传输层与应用层之间.


iOS sstp协议实现 iphone sstp_iOS sstp协议实现_03



四.SSL协议的分层


SSL 协议是一个分层协议,共有两层组成.

高级层包括:

1.SSL 握手协议(SSL Handshake Protocol)

2.改变加密约定协议(Change Ciper Spec Protocol)

3.报警协议(Alert Protocol)

底层:

SSL 记录层协议(SSL Record Protocol)


五.SSL 协议的传输过程


iOS sstp协议实现 iphone sstp_iOS sstp协议实现_04





接下来通过 Wirkshark 抓去 https 的数据包来分析客户端与服务端建立信任并传输数据的过程.


1.Client Hello

客户端发送所支持的 SSL/TLS 最高协议版本号、所支持的加密算法集合及压缩方法集合和随机数A等信息给服务器端。


iOS sstp协议实现 iphone sstp_客户端_05



2.Server Hello


(1).服务器端收到客户端信息后,选定双方都能够支持的 SSL/TLS 协议版本和加密方法及压缩方法、 随机数B和服务器证书返回给客户端。


iOS sstp协议实现 iphone sstp_随机数_06




(2).服务器将自己的证书发给客户端


iOS sstp协议实现 iphone sstp_随机数_07




(3)Server Hello Done


iOS sstp协议实现 iphone sstp_客户端_08

3.客户端主动再生成一个随机数C,开始生成秘钥,这个生成秘钥的算法是客户端跟服务器端共享的,因为之前协商的时候已经确定了算法了,生成秘钥后就可以加密一段内容,试着跟服务区通信了,这个内容是经过先散列,散列后将原内容和散列集一起用刚才的密钥加密;接着用服务器端证书中的公钥对随机数C加密。 

(1). Client 交换密钥数据包


iOS sstp协议实现 iphone sstp_iOS sstp协议实现_09



(2).Server 通知 Client 之后的消息开始启用加密参数




iOS sstp协议实现 iphone sstp_客户端_10


4. 然后把加密过的内容和加密好的随机数一起发向服务器端。

5.服务器用私钥解密得到随机数C,这样服务器端也同时拥有了随机数A、B、C,即刻生成密钥,再用密钥对加密的内容进行解密,然后解开后对其中的明文内容进行散列,与客户端发过来的散列值进行比较,如果相等,说明就是客户端发过来的,通信成功。

6.用步骤3中同样的方式发一段加密过的内容给客户端。

7.用步骤5一样的方式对服务器发来的内容进行验证。

8.客户端确定开始通信。

9.服务端确定开始通信。