HTTPS基于TLS加密传输数据,链路的数据都是加密后的二进制数据 那么HTTPS是如何保证数据不会被破解的呢? 我们来看下HTTPS的整个通讯过程 Alt text

基本通讯流程 (基于tls1.2)

  1. 客户端通过TCP三次握手与服务端建立TCP连接
  2. 客户端发送client hello消息到服务端,hello消息会包含一组必要的加密算法密码套件和它(客户端)能支持的最新的TLS版本.服务端收到消息后会回复"server hello"消息,以便客户端知道它能否支持这些算法和TLS版本,然后服务端会发送SSL证书给客户端,证书内容包含:公钥,域名,过期时间等信息,客户端会去第三方认证机构校验证书合法性.
  3. 校验完证书合法性后,客户端会生成一个session key并且使用公钥加密然后再发送给服务端,服务端通过私钥解密.
  4. 现在,客户端和服务器都持有相同的会话密钥来加密数据(对称加密),加密的数据在一个安全的双向通道中传输。

客户端校验证书合法性流程

graph TD
    A[客户端接收服务器证书] --> B{检查证书颁发机构}
    B -->|信任| C{检查证书签名}
    B -->|不信任| J[发出警告并可能拒绝连接]
    C -->|签名合法| D{检查证书有效期}
    C -->|签名非法| J
    D -->|未过期| E{检查证书域名}
    D -->|已过期| J
    E -->|域名匹配| F[证书校验成功]
    E -->|域名不匹配| J

客户端校验证书的过程主要包括以下步骤:

  • 首先,客户端会检查证书的颁发机构是否是客户端信任的证书颁发机构。如果不是,客户端会发出警告,提示用户证书可能不安全。

  • 然后,客户端会检查证书的签名。证书的签名是由证书的颁发机构生成的,客户端可以使用颁发机构的公钥来验证签名。如果签名验证失败,客户端会发出警告。

  • 客户端还会检查证书的有效期,如果证书已经过期,客户端会发出警告。

  • 最后,客户端会检查证书中的域名是否与正在访问的网站的域名匹配。如果不匹配,客户端会发出警告。

以上任何一步的验证失败,都可能导致客户端拒绝与服务器建立连接。这个过程是为了确保客户端正在与真正的服务器进行通信,而不是被中间人攻击者冒充的服务器。

为什么HTTPS在数据传输过程中切换到对称加密呢?

主要有两个原因:

  1. 安全性:非对称加密只能单向进行。这意味着如果服务器试图将加密的数据发送回客户端,任何人都可以使用公钥解密数据。
  2. 服务器资源:非对称加密增加了相当多的数学开销。它不适合在长时间的会话中进行数据传输。