前后端 HTTPS

HTTPS = HTTP + SSL/TLS。

一、HTTP 的问题

HTTP 的内容是明文传输的,并且会经过中间代理服务器、路由器、Wifi 热点、通信服务运营商等多个物理节点。如果信息在传输过程中被挟持,传输的内容就完全暴露了,并且挟持者还可以任意篡改信息而不会被察觉,这便是中间人攻击。

二、HTTPS = HTTP + SSL/TLS

为此,HTTPS 在 HTTP 的基础上引入了 SSL/TLS 协议,增加了加密传输、防篡改校验、身份校验功能。

三、加密方式

常见的加密方式有对称加密和非对称加密两种加密方式:

  • 对称加密:
    • 加密和解密使用同一个密钥
    • 运算速度快
    • 密钥需要保密,否则任何人都可以解密内容,因此双方交换密钥是一个困难
  • 非对称加密:
    • 使用两个密钥,公钥加密,密钥解密
    • 运算速度更慢
    • 公钥可以任意分发而不用担心内容被解密

HTTPS 采用的是对称加密和非对称加密结合的 “混合加密” 方式,具体来说,

  • 在连接建立之前,采用非对称加密的方式交换对话密钥
    • 生成随机数,将其作为对话密钥
    • 使用公钥加密随机数,将加密后结果发给服务端
    • 服务端接收加密后结果,使用密钥解密,获取到对话密钥
  • 在通信过程中,使用对话密钥对称加密数据

四、证书

证书由 CA(数字证书认证机构)颁发,其核心作用是验证服务端是否值得信赖。

验证证书的过程如下:

  • 从服务器获取到证书
  • 验证证书有效性
    • 根据证书信息,计算得到一个 hash 值
    • 从本地预装的 CA 公钥列表中找到对应 CA 的公钥,对证书中的签名进行解密,得到一个 hash 值
    • 比较两个 hash 值是否相等