HTTP和HTTPS的区别

宋正兵 on 2021-06-26

HTTP

HTTP 超文本传输协议,定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器的规则。

HTTP 的工作原理:浏览器在向服务器发送请求之前,首先需要建立 TCP 连接,然后才能发送 HTTP 请求报文,并接收 HTTP 响应报文。

  1. 客户端请求服务器建立连接
  2. 连接建立后,客户端向服务器发送 HTTP 请求
  3. 服务器收到 HTTP 请求后,根据请求做相应的响应
  4. 完成请求之后,客户端与服务器断开连接

以上是 HTTP/1.0,HTTP/1.1 使用了持续链接,即服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。这样做可以解决每次都要建立新的 TCP 连接带来的开销。

HTTPS

HTTPS 超文本传输安全协议,是在 HTTP 的基础上加上 TLS/SSL 协议,通过加密传输和身份验证保证传输的安全性。

HTTP 能完成网站浏览服务,但由于是明文传输数据和缺乏信息完整性校验,存在安全缺陷,特别是在网站登录和网络支付的场景。

HTTPS 提供数据加密、完整性校验以及身份验证,来解决 HTTP 的安全缺陷问题。

SSL协议的握手过程

开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。

第一步,客户端给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,服务器确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

第三步,客户端确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务器。

第四步,服务器使用自己的私钥,获取客户端发来的随机数(即Premaster secret)。

第五步,客户端和服务器根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

证书的作用:为网站提供身份证明,防止中间人攻击。证书包含有公钥,浏览器根据证书中的公钥加密信息发送给服务器。

HTTPS 在内容传输上使用的是对称加密,证书验证阶段使用的是非对称加密。

(1)如何保证公钥不被篡改?

将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

(2)公钥加密计算量太大,如何减少耗用的时间?

每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。

区别

  • 安全性不同。HTTP 没有用于数据加密和数据完整性校验的机制,而 HTTPS 通过数字证书来保障双方的通信安全
  • 监听端口不同。HTTP 监听端口 80,HTTPS 监听端口 443
  • 传输内容不同。HTTP 以纯文本格式明文传输,HTTPS 以密文格式传输
  • 协议头不同。HTTP 的 URL 以 http:// 开头,HTTPS 的URL 以 https:// 开头

综上所述,HTTP 和 HTTPS 最主要的差别在于 HTTP 是明文传输,而 HTTPS 传输的数据是经过加密的。