1. 概述

HTTP协议即超文本传输协议,位于TCP-IP协议四层模型(应用层-传输层-网络层-数据链路层)中的应用层。HTTPS协议是HTTP协议的基础上加了SSL(安全套接层)或TLS(安全传输层),将HTTP报文经过SSL层加密后再进行TCP传输。SSL主要通过RSA+AES结合的方式进行加密:先通过RSA交互AES密钥,再通过AES进行报文加密和解密。

2. 对称加密 (秘密密钥)

对称加密体制的关键问题在于,加密的可靠性依赖于密钥的保密性。

2.1. AES(高级加密标准)

由于DES不能满足现代加密要求,美国政府在2001年12月采纳了AES,并使其成为联邦信息处理标准AES是对称加密算法,其加密和解密使用的是同一个密钥主要使用的是替换、置换、移位、加,以及特殊的或运算。

3. 非对称加密(公开密钥)

对称加密体制下,一个n用户的系统需要n×(n-1)/2个密钥,而且每个用户必须跟踪和记录他期望通信的用户的所有密钥。随着用户增长,密钥数量急剧增加。可以通过公开密钥来解决你要膨胀的问题
在公开密钥或非对称加密体制中,每个用户有两种密钥:公钥及私钥,单个密钥要么用于加密要么用于解密,而不是同时用于加密、解密,因此用户可以随意公开公钥。两种密钥用于互逆的操作:通过一个密钥能解除另一个密钥对信息进行的操作,但是根据其中一个密钥却无法有效推导出另一个密钥
公开密钥体制中,用户只需要存储两个密钥:公钥和私钥。

3.1. RSA

RSA加密体制是一种公开密钥体制
RSA的一个不太好的特性就是密钥太长,256位是可用的最小长度,但大多数情况更推荐2048位
RSA的加密过程是进行幂运算,也就是对明文的每个分块求幂,乘幂是加密密钥,幂运算在计算机上是非常耗时的,而且计算时间会随着密钥长度的增加呈指数型增长,因此RSA算法的速度一般只有对称算法的1/10000

非对称加密的特点

    1. 基于大合数的因子分解的困难性
    1. 可用于加密
    1. 可用于数字签名

      加密解密过程

    1. 随机选取两个大素数p和q,且保密
    1. 计算n=pq,将n公开
    1. 计算φ(n)=(p-1)(q-1),对φ(n)保密
    1. 随机选取一个正整数e,1<e<φ(n),且(e,φ(n))-1,将e公开
    1. ed = 1 mod φ(n)即d是e mod φ(n)的乘法逆元
    1. 加密:C = M

      安全性

    1. e的选择随机且含1多更安全但计算慢,建议取e=216+1=65537
    1. d的选择d不能太小,要足够大
    1. 不要许多用户共用一个模n,容易受到共模攻击

      4. 密钥交换

      S生成公钥并将公钥传输给C时,如果有中间人M截取了这个公钥并且M将自己的公钥传递给了C,此时C用M的公钥加密了对称密钥发给了M,M用自己的私钥解密对称密钥并将此密钥用S的公钥加密传递给S,这样S和C通信的对称密钥就会被泄露
      HTTPS通信-更新 - 图1
      中间人获取对称密钥

为了防止中间人窃取密钥,需要一个值得信任的第三方机构来对通信双方的身份进行认证,证明这个公钥确实是对方的,这个第三方机构就是CA,其颁发的证书就是数字证书
此时的通信过程为:服务端生成公钥—>服务端生成证书—>CA私钥签署证书(生成证书的摘要并进行加密)—>服务端获取签名后的证书发给客户端—>客户端用CA公钥解密摘要、客户使用摘要算法生成摘要—>比对两个摘要—>验证通过—>使用公钥进行加密通
HTTPS通信-更新 - 图2
中间人使用CA证书窃取密钥

5. HTTPS通信

以下就是一个简单的Https证书通信过程
HTTPS通信-更新 - 图3简单的通信过程
很多人会对设备是如何信任CA有一些疑问,其实目前CA证书一般是依靠预置在设备中来实现设备对CA的信任的,所以在各种设备上可以通过自行操作来实现对自签名证书的信任:

    1. Windows设备上可以通过将自签名的CA证书安装到受信任的根证书颁发机构来实现
    1. Mac可以将自签名的证书安装到钥匙串并且选择使用证书时信任
    1. Android7.0之前的版本可以直接安装用户证书,Android7.0之后需要将其安装到系统证书
    1. iOS可以直接安装证书并在通用设置中对证书进行信任

对于具体的抓包流程可以查看以下文章:Android7.0以上设备Https抓包的姿势抓包那些事
由此可见,仅依靠CA并不是确保通信安全的完全之策,应用本身是无法控制系统层面对证书的信任的,所以目前大部分的App会自定义证书校验逻辑(SSL Pinning),在某些时候通过chrome代理抓取数据时可能会遇到证书透明度错误,这也是一个针对不安全CA的一项安全措施,具体信息可以参考其官网:证书透明度:证书透明度 (transparency.dev)[1],在这里就不再赘述了。

引用链接

[1] 证书透明度:证书透明度 (transparency.dev): https://certificate.transparency.dev/
HTTPS通信-更新 - 图4
移动安全星球
定期分享移动安全攻防小知识(Android安全、iOS安全)
25篇原创内容
公众号