HTTPS 和 HTTP 的区别
HTTP: 是一种无状态的请求 - 响应协议。是互联网上应用最广泛的一种通讯协议,基于 TCP ,可以使浏览器工作效率更为高效,减少网络传输。
HTTPS: 是 HTTP 的加强版,可以认为是 HTTP + SSL (Secure Socket Layer)。 在 HTTP 的基础之上增加了一系列的安全机制。一方面可以保证数据传输的安全,另一方面对访问者增加了验证机制。是目前现行架构下,最为安全的解决方案。
主要区别
安全性
- HTTP 是明文传输协议,数据在传输过程中不加密,容易被篡改和窃听;
- HTTPS 通过使用 SSL (Secure Sockets Layer) 和 TLS (Transport Layer Security) 协议对数据进行加密,确保数据在传输过程中的安全性,防止被窃听和篡改;
数据传输协议
- HTTP 使用 TCP (Transmission Control Protocol) 作为传输协议,数据传输速度快;
- HTTPS 在 HTTP 的基础之上加入了 SSL/TLS 协议,需要进行加解密操作,数据传输速度慢;
端口号
- HTTP 默认端口号 80;
- HTTPS 默认端口号 443;
证书
- HTTPS 需要使用 SSL 证书,用于验证服务器的身份,并确保数据传输的安全;
- HTTP 不需要使用证书。
HTTP 执行机制
客户端发起请求:
客户端向服务器发送 HTTP 请求。这个请求可以是不同类型的,如 GET(请求数据),POST(提交数据),PUT(更新数据)等;
建立连接:
客户端通过网络与服务器建立 TCP 连接,通常是到服务器的 80 端口。
对于现代浏览器和服务器,通常使用更复杂的 TCP 握手过程,比如 TCP 快速打开(TFO)和 TLS 假开始(TLS False Start)。发送请求:
一旦 TCP 连接建立,客户端发送一个 HTTP 请求。HTTP 请求包括一个请求行(指明动作如 GET 或 POST)、请求头(包含元数据如 User-Agent、Accept、Content-Type 等)和请求体(对于 POST 请求,包含要提交的数据)。
服务器处理请求:
服务器接收请求并根据请求类型处理它。服务器可能会查询数据库、读取文件或执行其他操作来生成响应。
服务器响应:
服务器发送一个 HTTP 响应到客户端。响应包括一个状态行(包含状态码如 200 OK 或 404 Not Found)、响应头(包含元数据如 Content-Type、Cache-Control 等)和响应体(包含请求的资源的实际数据)。
关闭连接:
- 在 HTTP/1.0 中,完成响应后,服务器关闭 TCP 连接;
- 在 HTTP/1.1 中,默认使用持久连接(keep-alive),连接在多个请求和响应之后保持打开状态,除非客户端或服务器决定关闭它;
- 在 HTTP/2 中,多个请求可以在同一个连接上并行无阻塞地进行,进一步提高效率。
客户端处理响应:
客户端接收响应并根据内容类型处理数据,如渲染 HTML 页面、解析 JSON 数据等。
HTTPS 执行机制
客户端请求:
客户端通过在请求的 URL 中使用 “https://” 来发起一个 HTTPS 连接。
TLS 握手
服务器在其端口 443 上监听 HTTPS 请求,并在收到请求时响应;
服务器将其 TLS 证书发送给客户端。这个证书包含了服务器的公钥和证书颁发机构(CA)的签名;证书验证:
客户端验证服务器的证书是否有效,是否在有效期内,以及是否由受信任的 CA 签发。这个过程也包括检查证书的撤销状态。
这一步,将执行以下步骤进行身份验证:- 验证证书链:客户端检查服务器证书是否由受信任的证书颁发机构(CA)签发,以及证书链是否有效;
- 检查有效期:客户端检查证书的有效期,确保证书当前有效期未过期;
- 检查撤销状态:客户端肯呢个会检查证书是否被撤销,这可以通过访问 CA 的在线证书状态协议 (OCSP) 服务器或者下载证书撤销列表 (CRL) 来完成;
- 验证数字签名:客户端使用 CA 的公钥来解密证书的数字签名,以确保它是由正确的 CA 签发且未被篡改;
密钥交换
一旦确认证书有效,客户端使用服务器的公钥来加密生成一个随机的会话密钥,并将其发送给服务器;
服务器用其私钥解密这个会话密钥。现在,客户端和服务器端都有了共同的会话密钥,用于后续通信的加密;加密通信
使用会话密钥,客户端和服务器端之间的所有数据传输都将被加密。这保证了数据传输的机密性和完整性;
客户端和服务器会使用对称加密算法来加密进一步的通信;数据交换
客户端和服务器现在可以完全的交换 HTTP 数据。客户端发送加密的 HTTP 请求,服务器以加密的 HTTP 响应回复;
会话结束
一旦会话完成,客户端和服务器将结束连接并丢弃会话密钥,确保每一个连接都使用一个新的随机密钥。