# HTTPS 加密

HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段

# 为什么数据传输是用对称加密?

  1. 非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的
  2. 在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以 HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密

# HTTPS 为什么安全?

因为 HTTPS 保证了传输安全,防止传输过程被监听、防止数据被窃取,可以确认网站的真实性

# HTTPS 的实现原理

对称加密:加解密密钥相同
非对称加密:公钥加密,私钥解密

  1. 浏览器发起 HTTPS 请求,连接到 server 的 443 端口
  2. 服务端返回 HTTPS 证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等
  3. 客户端验证证书是否合法(比如颁发机构,过期时间等),如果不合法则提示告警,HTTPS 传输无法继续
  4. 证书验证合法后,在本地生成随机数
  5. 通过公钥加密随机数,并把加密后的随机数传输给服务端
  6. 服务端通过私钥对随机数进行解密
  7. 服务端通过客户端传入的随机数构造对称加密算法,对要返回给客户端的内容加密后传输
  8. 客户端收到服务端返回的密文后使用客户端密钥进行对称解密,得到服务端发送的数据,整个 HTTPS 传输完成

# 加密算法

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH 算法:MD5,SHA1,SHA256

# 为什么数据传输是用对称加密?

  1. 非对称加密的加解密效率是非常低的,而 HTTPS 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的
  2. 在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以 HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密

# 为什么需要 CA 认证机构颁发证书?

HTTP 协议被认为不安全是因为传输过程容易被监听者勾线监听、伪造服务器,而 HTTPS 协议主要解决的便是网络传输的安全性问题
假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的"中间人攻击"问题

# 浏览器如何验证证书的合法性?

  1. 验证域名、有效期等信息是否正确
  2. 判断证书来源是否合法,每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证
  3. 判断证书是否被篡改:需要与 CA 服务器进行校验
  4. 判断证书是否已吊销

# 用了 HTTPS 会被抓包吗?

HTTPS 的数据是加密的,常规下抓包工具代理请求后抓到的包内容是加密状态,无法直接查看
通常 HTTPS 抓包工具的使用方法是会生成一个证书,用户需要手动把证书安装到客户端中,然后终端发起的所有请求通过该证书完成与抓包工具的交互,然后抓包工具再转发请求到服务器,最后把服务器返回的结果在控制台输出后再返回给终端,从而完成整个请求的闭环

# 既然 HTTPS 不能防抓包,那 HTTPS 有什么意义?

HTTPS 可以防止用户在不知情的情况下通信链路被监听,对于主动授信的抓包操作是不提供防护的,因为这个场景用户是已经对风险知情。要防止被抓包,需要采用应用级的安全防护,例如采用私有的对称加密,同时做好移动端的防反编译加固,防止本地算法被破解

Last Updated: 5/6/2020, 11:48:16 AM