从近来几年来看,绝大部分的知名网站都已经使用 HTTPS 协议,而不再是 HTTP。原因就在于 HTTP 是不安全的协议。不安全具体表现在三个方面:

  • 使用明文通信,不加密,内容可能被窃听
  • 不验证通信方的身份,因此有可能遭遇恶意的伪装
  • 无法证明报文的完整性,所以报文可能被篡改

正是由于这些不安全的因素,所以,各大网站都从原来的 HTTP 换为 HTTPS

什么是HTTPS

HTTPS 可以说是一个升级版的 HTTP,升级的方面就是上面提到的三个缺点。所以,HTTPS 是通信加密的,具有证书的,报文完整性收到保护的 HTTP 协议。

也就是说,HTTPS = HTTP + 通信加密 + 证书 + 完整性保护

HTTPS 并非是一个新的协议,只是 HTTP 通信接口的部分使用 SSLTLS 协议代替而已。

在前面的文章提到 TCP/IP 的分层管理,应用层直接与传输层通信,但是,使用 SSL 时,应用层与传输层之间多了一层 SSL

HTTP系列(八)—— HTTPS

(图片来源于《图解HTTP》)

加密技术

HTTPS 采用了共享**加密和公开**加密两者并用的混合加密技术。

共享**加密

**加密和解密用同一个**的方式就是共享**加密。**也就是说,加密和解密用的是同一个**。

这种方式的缺点非常明显,如果客户端与服务器使用这种方式来加密通信,那么客户端就需要把**也一起发送给服务器,这样一来,攻击者就很可能把**截获了,然而,加密就没意义了,因为这种方式加密和解密都是使用同一个**。

发送**就有可能被窃听,但是不发送,对方就不能解密,再说了,如果**能够安全发送,那么数据也能安全达到了,这似乎是一种鸡肋的加密方式。

公开**加密

公开**加密很好的解决了上面共享**加密的问题。

公开**加密使用了一对非对称的**,一把称为私有**,另一把称为公开**

具体是这样实现的:发送密文的一方使用对方的公开**进行加密处理,对方收到被加密的信息后,使用自己的私有**进行解密。

HTTPS的加密技术

HTTPS 的加密技术就是将上面两种加密技术混合来使用,在交换**环节使用公开**加密,之后的建立通信交换报文阶段则使用共享**的加密方式。另外,在确保交换的**是安全的前提下,就会使用共享加密方式进行通信。

HTTPS的安全通信机制

整个通信的过程大致可分为以下的步骤:

步骤1: 客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 版本、加密组件(使用的加密算法及**长度等)。

步骤2: 如果服务器可进行 SSL 通信时,则会以 Server Hello 报文作为应答。同样的,在报文中包含了 SSL 版本以及加密组件。

步骤3: 服务器发送 Certificate 报文,报文中包含公开**证书。

步骤4: 服务器发送 Server Hello Done 报文通知客户端,表示 SSL 第一次握手结束。

步骤5: 客户端发送 Client Key Exchange 报文,报文中包含通信加密中使用的随机密码串 Pre-master secret。(注:该报文已使用步骤3的公开**进行加密)。

步骤6: 客户端继续发送 Change Cipher Spec 报文,该报文提示服务器,在此报文之后的通信会采用 Pre-master secret **加密。

步骤7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手写上是否能够成功,要以服务器是否能够正确解密该报文为准。

步骤8: 服务器发送 Change Cipher Spec 报文

步骤9: 服务器发送 Finished 报文

步骤10: 服务器和客户端的 Finished 报文交换完毕以后,SSL 连接就算建立成功。从此开始进行应用层协议的通信,即发送 HTTP 请求。

步骤11: 应用层协议通信,发送 HTTP 响应

步骤12: 最后由客户端断开连接,断开时,发送 close_notify 报文。

HTTP系列(八)—— HTTPS

 

相关文章:

  • 2021-07-26
  • 2022-12-23
  • 2022-01-04
  • 2021-09-23
  • 2021-10-05
  • 2021-05-24
  • 2021-08-20
猜你喜欢
  • 2021-09-19
  • 2021-05-25
  • 2022-12-23
  • 2021-06-11
  • 2021-11-21
  • 2022-12-23
  • 2021-08-10
相关资源
相似解决方案