您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页从ATS开始-学习笔记Part1

从ATS开始-学习笔记Part1

来源:二三娱乐

升级到了xCode7,第一次打开工程,虽然有了心理准备,但是心理仍然拔凉拔凉的.
几十个error(Swift1.2->2.0).修改完毕后,兴匆匆的Command+R,登陆失败=.=.
经过一番查找,原来是ATS的锅,于是有了ATS的学习笔记.

ATS

  • Transport Layer Security协议版本要求TLS1.2以上
  • 服务的Ciphers配置要求支持Forward Secrecy等
  • 证书签名算法符合ATS要求等
  1. 全部使用https
  2. 部分使用https
  3. 部分不使用https
  4. 全部不使用https

相关plist关键字涉及到NSAllowsArbitraryLoads等,上方文档中有较为详细的介绍.

Https

主要流程在于客户端发送请求前的四次握手,交换证书,随机数,协议等.然后通过RSA用公钥算法生成密钥,然后通过密钥加密信息.服务端通过私钥解开信息的密钥,然后用密钥解开信息.

握手阶段主要目的在于交换和验证信息,让双方保持可靠.

加密阶段分为两个部分.第一个部分为通讯内容加密,使用对称加密方式,需要一个密钥.而这个密钥也需要加密,不然会被人截取,所以使用RSA的方式进行加密.

握手

  1. 客户端告诉服务端:我的协议版本(ATS需要TSL1.2),我的加密方式(RSA),我的随机数(第一个随机数)
  2. 服务端收到了以后,告诉客户端:确认协议版本(如果不支持客户端的协议版本,则通信关闭),确认加密方式,服务端的随机数(第二个随机数),证书
  3. 客户端会收到证书,证书非常重要,其中包含了服务端的公钥(RSA相关).然后告诉服务端:一切ok,准备通信,在发送一个随机数(第三个随机数)
  4. 服务端收到了随机数后,通过以上3个随机数,生成了一个密钥,发送给了客户端.而这个密钥就是随后加密通信内容的密钥.

有个小小的问题,为什么要有3个随机数,服务端自己生成一个不可以吗?

原因是目前随机数算法都是伪随机,一旦随机数算法被破解,那么一切都可能会被破解.而三个随机数作用起来,被破解的可能性就非常小了.

加密

加密分为2个部分,握手阶段最重要的事情就是生成一个密钥,用来加密通信内容.

那么问题来了,为什么需要用2种加密方式呢.

生成密钥通过RSA,加密通讯内容使用DES.

  • 无法单独使用RSA的原因是:该方法一是非常慢,因为其加密原理.二是对加密内容有一定要求,无法加密过长的内容.(实际上不是这个意思,加密内容是把内容转为ascii码,太长会导致这个ascii码组成的数字太大,RSA无法加密太大的数字.)
  • 无法单独使用DES加密的原因是:因为传输过程中,是http.所以密钥在传输过程中是明文,会被获取.

所以结合双方有点使用,完美的解决了这个问题.

RSA

非对称加密的一种算法.具体数学原理参考:

略显复杂.

大概意思就是说,这种算法有一个公钥,一个密钥.公钥公开,私钥自己拿着.通过公钥加密的东西可以用私钥解开,通过私钥加密的东西也可以通过公钥解开.

这种算法安全的原因是基于一个比较基础的原理:人类目前暂时很难分解2个很大的素数的乘积.1024位2进制的私钥基本安全,2048位的私钥就目前而言是非常安全的.

所以在TSL中,通过该方法使用公钥加密DES的密钥,那么密钥就非常安全了.然后通过私钥解开这个加密过后的密钥,就能拿到密钥本身了.在通过密钥本身,就能解开信息内容本身了.

问题又来了,既然是需要通过公钥来加密,那么公钥在哪里?

在证书里.在握手的时候,服务端会给客户端证书,证书就包含了公钥.

证书

通过证书包含的公钥以及服务端的私钥,可以确保通信内容的加密解密.

问题继续来,为什么一定要给个证书呢,直接给公钥不行么?

不行.

公钥私钥只能证明这一套配套,能互相解开对方加密的信息.但是没有办法证明这个公钥属于谁.或许服务器被入侵,公钥私钥被人替换了,也无法得知.

所以就有了数字证书这个东西.找个第三方(CA)公正,把你的私人信息(公钥)进行加密,做成一张数字证书.用什么东西加密?用第三方(CA)的私钥.

当然,这件事情是要收费的...

操作系统等会有一个CA的信任列表,使用CA的公钥解开数字证书,再通过列表对比,则会确认该证书是否是伪造的.

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务