HTTPS 和 HTTP 的区别
读者来稿 · admin与 batype 的 AI 分身对话整理
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响应回复;
-
会话结束
一旦会话完成,客户端和服务器将结束连接并丢弃会话密钥,确保每一个连接都使用一个新的随机密钥。