HTTPS前瞻

网络传输的安全性

由于 HTTP 天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求 / 响应报文,数据不具有可信性。

黑客,代理可在数据传输的任意节点对数据进行拦截,因为HTTP是明文传输,只要拦截成功,就可以修改请求或者响应报文

黑客截胡

对称加密与非对称加密

  • HTTP协议:不安全,未加密
  • HTTPS协议:安全,对请求报文和响应报文做加密

加密的方式有对称加密和非对称加密。

对称加密

顾名思义:加密和解密使用同一把密钥

  • 特点:
    • 加密使用相同密钥
    • 高效,适用于大量数据加密的场景
    • 算法公开,安全性取决于密钥大小,但是密钥越大效率越低,需要在安全以及效率角度做权衡
  • 缺点:
    • 算法本身安全,但是应用场景不安全,因为加密和解密使用的是同一个密钥

对称加密算法

如果使用对称加密算法,浏览器在第一次请求的时候,就需要携带密钥,将密钥告知服务端,此过程,黑客仍然科技截胡,获得密钥。

在之后的请求与响应中,黑客已经获得了密钥,同时也可以获得密文,加密多此一举,黑客仍然可以解密。

非对称加密

使用匹配的一对密钥来分别进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)

算法:RSA、ECC、Elgamal、背包算法、Rabin、D-H等

  • 特点:
    • 安全性高
    • 公钥加密的数据只能用对应的私钥解密,同理,私钥加密的数据只能用对应的公钥解密
  • 缺点:加解密复杂,效率低,耗时较长,不适用于大量数据加密的场景
  • 用法概要:
    • 加密:对数据做加密。
    • 签名:证明数据是谁发的

非对称加密的使用

首先需要生成一对匹配的公钥和私钥(公钥只能由私钥生成,私钥不公开)

公开公钥

公开公钥

当然,黑客也可以拿到公钥,但是公钥的用途是进新加密,无法进行解密。

公钥加密

场景:用来对数据进行加密传输

加密传输

注意:

  • 因为公钥加密数据只有对应的私钥才能解密,所以密文很安全
  • 如果在网络上互相发送密文,可以让对方也发送其自身的公钥,用对方的公钥来加密。

私钥签名

完成身份认证。

场景:将公钥公布后,同时需要证明公钥是自己发的

第一步:服务端用自身的私钥对明文的hash值进行加密,把密文(签名)和明文一起发送给客户端

第一步

第二步:客户端用服务端的公钥进行解密,解密后的明文hash值(使用和服务端同样的哈希算法,计算明文的hash会得到同样的结果)和接收到的明文的hash值进行对比,如果一样则是服务端发的

第二步

HTTPS协议

如果服务端生成的公钥通过响应报文传递,结果是这样的:

错误传递

如何解决?

牵扯到认证方式的问题。

认证机构

就毕业就业问题来举例:

当我们入职时,入职hr会查看我们的学历是否造假,这就需要一个权威的平台来对我们自身的身份进行认证,这个权威的平台就是学信网。

在HTTPS中,这个权威平台叫做认证机构(根节点)(全球所有企业都认为其是有权威的)

  • 认证机构在全球只有几家,单由这几家公司是管理不过来的,所以其下会有一级二级的节点,这些节点都通过这些认证机构认证过(可以理解为代理商)

浏览器为了确认数据时服务端发送的, 会去认证机构去确认,具体的确认过程见下。

HTTPS认证以及请求流程

具体文字描述:

前提条件:服务端的公钥A私钥A,认证机构的公钥B私钥B客户端会话密钥

  1. 公司将服务器的域名,服务器公钥A,认证时长等信息提交给认证机构
  2. 认证机构使用私钥B将服务端提交的信息加密,生成证书
  3. 认证机构将公钥B交给客户端
  4. 客户端发送预请求,向服务端请求证书
  5. 服务端发送证书
  6. 客户端利用公钥B将证书解密,拿到服务端域名、服务端公钥A等信息
  7. 客户端使用公钥A,对会话密钥进行加密
  8. 客户端将加密后的会话密钥发送给服务端
  9. 服务端利用私钥A对加密的会话密钥进行解密,拿到会话密钥
  10. 服务端告知客户端收到会话密钥
  11. 双方使用会话密钥进行对称加密的数据请求与响应