作者 青鸟

计算机网络中对应用层中的HTTP做了详细解释,而却对于现在广泛使用的HTTPS却一笔带过,因此专门也了一篇博客来做此学习

HTTPS简介

HTTPS(Hypertext Transfer Protocol Secure)是一种用于在Web浏览器和Web服务器之间安全传输数据的协议。HTTPS的安全性基于SSL(Secure Sockets Layer)或其继任者TLS(Transport Layer Security)协议。以下是HTTPS中SSL/TLS的工作原理:

  1. 握手阶段(Handshake Phase):

    • 客户端向服务器发送一个连接请求,并请求建立安全连接。
    • 服务器会回复一个包含其公钥和数字证书的消息。数字证书通常是由可信的证书颁发机构(CA)签发的,用于验证服务器的身份。
    • 客户端会验证服务器的数字证书。如果数字证书有效且由可信CA签发,客户端会生成一个随机的对称密钥,然后使用服务器的公钥加密这个密钥。
    • 客户端将加密后的密钥发送回服务器,只有服务器可以解密它,因为它拥有相应的私钥。
    • 服务器使用其私钥解密客户端发送的密钥,并将其存储在内存中。
  2. 数据传输阶段(Data Transfer Phase):

    • 一旦握手完成,客户端和服务器之间的通信将变为安全的。他们使用共享的对称密钥来加密和解密传输的数据。
    • 所有通过HTTPS传输的数据都经过加密,使其难以被窃听或篡改。
    • 客户端和服务器会定期重新协商新的对称密钥,以增加安全性。
  3. 断开连接:

    • 当通信结束或超时后,客户端和服务器可以选择断开连接。这个断开的过程是通过一个正常的关闭握手来完成的,确保在断开连接之前还可以进行任何必要的清理工作。

总之,SSL/TLS协议在HTTPS中提供了加密和身份验证的安全性。在握手阶段,服务器提供其数字证书以验证其身份,并与客户端共享一个加密密钥。在数据传输阶段,所有的通信都通过这个密钥进行加密,确保数据的保密性和完整性。这样,HTTPS可以确保在Web浏览器和服务器之间进行安全的数据传输。

握手阶段(Handshake Phase)详解

SSL/TLS握手阶段是建立安全连接的关键部分,确保客户端与服务器之间的通信安全和可信。以下是SSL/TLS握手阶段的详细描述:

  1. 客户端Hello

    • 客户端发起握手过程,向服务器发送一个ClientHello消息。
    • ClientHello包含一些重要的信息:
      • 支持的SSL/TLS版本。
      • 一个随机数,用于生成后续的密钥。
      • 支持的密码套件列表,包括加密算法、摘要算法等。
  2. 服务器Hello

    • 服务器接收到ClientHello消息后,选择一个与客户端共同支持的SSL/TLS版本,并发送一个ServerHello消息回应客户端。
    • ServerHello消息包含:
      • 所选择的SSL/TLS版本。
      • 服务器生成的随机数。
      • 选择的密码套件。
  3. 服务器证书

    • 如果服务器需要进行身份验证(通常是),它会发送一个包含数字证书的消息给客户端。数字证书通常是由受信任的证书颁发机构(CA)签发的,用于验证服务器的身份。
    • 客户端会验证数字证书的有效性,包括检查是否由信任的CA签发,是否没有过期,以及是否与目标服务器的域名匹配。
  4. 服务器Key Exchange(可选)

    • 在某些情况下,服务器可能会发送一个Key Exchange消息,其中包含用于密钥协商的信息。这通常在使用一些特殊密码套件时发生。
  5. 客户端Key Exchange

    • 客户端生成一个随机的对称密钥,并使用服务器的公钥(从服务器的数字证书中提取)对其进行加密。
    • 客户端将加密后的对称密钥发送回服务器。
  6. 握手完成

    • 服务器收到加密的对称密钥后,使用自己的私钥进行解密,并存储该密钥以供后续通信使用。
    • 握手完成消息通知客户端,握手成功完成。此后,所有数据传输都将使用共享的对称密钥进行加密和解密。
    • 握手完成后,SSL/TLS连接建立,安全通信开始。

在握手阶段完成后,客户端和服务器之间的通信将使用共享的对称密钥进行加密和解密,确保数据的保密性和完整性。这个过程提供了安全的连接,用于传输敏感信息,如登录凭据或支付数据。

断开连接阶段详解

SSL/TLS连接的断开过程是一个正常的关闭握手,它确保在结束通信时可以完成清理工作并保持连接的安全性。以下是SSL/TLS连接的断开过程的详细解释:

  1. 关闭通知

    • 要关闭SSL/TLS连接,任一端可以发送一个CloseNotify警报消息,以通知对方连接即将关闭。
  2. 接收关闭通知

    • 接收方(通常是另一端)接收到CloseNotify消息后,会发送一个CloseNotify回复,表示已经收到关闭通知。
  3. 完整性检查

    • 在发送或接收CloseNotify消息之前,双方会确保先前的数据传输已经完成,且没有遭到篡改。这可以通过消息认证码(MAC)或其他完整性验证机制来实现。
  4. 关闭连接

    • 一旦双方都确认了关闭通知并完成了完整性检查,他们可以安全地关闭连接。
    • 这意味着双方停止发送和接收数据,并且不再执行新的握手或数据传输。
  5. 等待

    • 在正常关闭握手之后,连接可能会保持一段时间,以确保没有任何滞留的数据块。这个等待时间称为”TIME_WAIT”状态,通常持续几分钟。
    • TIME_WAIT状态有助于防止在之前的连接关闭后出现重复的数据包。
  6. 连接终止

    • 一旦TIME_WAIT状态结束,连接就会彻底终止,释放双方所占用的资源。
    • 此时,SSL/TLS连接被完全关闭,不再可用。

SSL/TLS的正常关闭握手确保了在结束连接时数据的完整性和安全性。这对于保护通信的隐私和防止中间人攻击非常重要。正常关闭也允许双方在以后重新建立连接,如果需要的话。

需要注意的是,有时连接可能会由于网络问题或超时而突然中断,而不经历正常的关闭握手。在这种情况下,双方可能无法执行关闭通知和完整性检查,这可能会导致安全性问题。因此,正常的关闭握手是确保连接安全结束的关键步骤。

题外话

最近在做微信视频号的抓包,网上很多的说法是通过抓包后分析HTTPS中的地址来进行分析视频请求的url,在浏览器中打开,就可以下载,但是使用了抓包软件实际操作后,发现了其实是看不到https的被解析后的请求的,在查找了相关的资料后发现微信自己实现了一套在应用层的加密来保护数据的安全,因此抓包程序就无法通过相应的加密算法解析http请求。因此对于微信的抓包还需要在传输层的数据包分析来解析出相应所需要的信息。在应用层的分析基本是没有办法了得到相应的数据来做逆向工程了。