HTTPS 和 HTTP 的区别

HTTP: 是一种无状态的请求 - 响应协议。是互联网上应用最广泛的一种通讯协议,基于 TCP ,可以使浏览器工作效率更为高效,减少网络传输。

HTTPS: 是 HTTP 的加强版,可以认为是 HTTP + SSL (Secure Socket Layer)。 在 HTTP 的基础之上增加了一系列的安全机制。一方面可以保证数据传输的安全,另一方面对访问者增加了验证机制。是目前现行架构下,最为安全的解决方案。

主要区别

  1. 安全性

    • HTTP 是明文传输协议,数据在传输过程中不加密,容易被篡改和窃听;
    • HTTPS 通过使用 SSL (Secure Sockets Layer) 和 TLS (Transport Layer Security) 协议对数据进行加密,确保数据在传输过程中的安全性,防止被窃听和篡改;
  2. 数据传输协议

    • HTTP 使用 TCP (Transmission Control Protocol) 作为传输协议,数据传输速度快;
    • HTTPS 在 HTTP 的基础之上加入了 SSL/TLS 协议,需要进行加解密操作,数据传输速度慢;
  3. 端口号

    • HTTP 默认端口号 80;
    • HTTPS 默认端口号 443;
  4. 证书

    • HTTPS 需要使用 SSL 证书,用于验证服务器的身份,并确保数据传输的安全;
    • HTTP 不需要使用证书。

HTTP 执行机制

  1. 客户端发起请求:

    客户端向服务器发送 HTTP 请求。这个请求可以是不同类型的,如 GET(请求数据),POST(提交数据),PUT(更新数据)等;

  2. 建立连接:

    客户端通过网络与服务器建立 TCP 连接,通常是到服务器的 80 端口。
    对于现代浏览器和服务器,通常使用更复杂的 TCP 握手过程,比如 TCP 快速打开(TFO)和 TLS 假开始(TLS False Start)。

  3. 发送请求:

    一旦 TCP 连接建立,客户端发送一个 HTTP 请求。HTTP 请求包括一个请求行(指明动作如 GET 或 POST)、请求头(包含元数据如 User-Agent、Accept、Content-Type 等)和请求体(对于 POST 请求,包含要提交的数据)。

  4. 服务器处理请求:

    服务器接收请求并根据请求类型处理它。服务器可能会查询数据库、读取文件或执行其他操作来生成响应。

  5. 服务器响应:

    服务器发送一个 HTTP 响应到客户端。响应包括一个状态行(包含状态码如 200 OK 或 404 Not Found)、响应头(包含元数据如 Content-Type、Cache-Control 等)和响应体(包含请求的资源的实际数据)。

  6. 关闭连接:

    • 在 HTTP/1.0 中,完成响应后,服务器关闭 TCP 连接;
    • 在 HTTP/1.1 中,默认使用持久连接(keep-alive),连接在多个请求和响应之后保持打开状态,除非客户端或服务器决定关闭它;
    • 在 HTTP/2 中,多个请求可以在同一个连接上并行无阻塞地进行,进一步提高效率。
  7. 客户端处理响应:

    客户端接收响应并根据内容类型处理数据,如渲染 HTML 页面、解析 JSON 数据等。

HTTPS 执行机制

  1. 客户端请求:

    客户端通过在请求的 URL 中使用 “https://” 来发起一个 HTTPS 连接。

  2. TLS 握手

    服务器在其端口 443 上监听 HTTPS 请求,并在收到请求时响应;
    服务器将其 TLS 证书发送给客户端。这个证书包含了服务器的公钥和证书颁发机构(CA)的签名;

  3. 证书验证:

    客户端验证服务器的证书是否有效,是否在有效期内,以及是否由受信任的 CA 签发。这个过程也包括检查证书的撤销状态。
    这一步,将执行以下步骤进行身份验证:

    • 验证证书链:客户端检查服务器证书是否由受信任的证书颁发机构(CA)签发,以及证书链是否有效;
    • 检查有效期:客户端检查证书的有效期,确保证书当前有效期未过期;
    • 检查撤销状态:客户端肯呢个会检查证书是否被撤销,这可以通过访问 CA 的在线证书状态协议 (OCSP) 服务器或者下载证书撤销列表 (CRL) 来完成;
    • 验证数字签名:客户端使用 CA 的公钥来解密证书的数字签名,以确保它是由正确的 CA 签发且未被篡改;
  4. 密钥交换

    一旦确认证书有效,客户端使用服务器的公钥来加密生成一个随机的会话密钥,并将其发送给服务器;
    服务器用其私钥解密这个会话密钥。现在,客户端和服务器端都有了共同的会话密钥,用于后续通信的加密;

  5. 加密通信

    使用会话密钥,客户端和服务器端之间的所有数据传输都将被加密。这保证了数据传输的机密性和完整性;
    客户端和服务器会使用对称加密算法来加密进一步的通信;

  6. 数据交换

    客户端和服务器现在可以完全的交换 HTTP 数据。客户端发送加密的 HTTP 请求,服务器以加密的 HTTP 响应回复;

  7. 会话结束

    一旦会话完成,客户端和服务器将结束连接并丢弃会话密钥,确保每一个连接都使用一个新的随机密钥。