HTTP
HTTP 超文本传输协议,定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器的规则。
HTTP 的工作原理:浏览器在向服务器发送请求之前,首先需要建立 TCP 连接,然后才能发送 HTTP 请求报文,并接收 HTTP 响应报文。
- 客户端请求服务器建立连接
- 连接建立后,客户端向服务器发送 HTTP 请求
- 服务器收到 HTTP 请求后,根据请求做相应的响应
- 完成请求之后,客户端与服务器断开连接
以上是 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 传输的数据是经过加密的。