HTTPS工作过程

1. 前言

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

2. 回顾TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

TCP-handshake.jpg

2.1. TCP的三次握手

建立一个TCP连接主要有三个步骤:

  1. client端首先发送一个SYN包告诉server端: 我要建立一个链接,我的序号是x
  2. server端接收到SYN包后回复client一个ACK包(将x+1): 我收到了;同时server端也发送一个SYN包给client: 我这边已经准备好了,我的序号是y,你可以连接了。
  3. client收到之后,回复一个ACK包(y+1): 好,我已经连接好了。

这样一个TCP连接成功建立。

关于tcp三次握手找到一张比较形象的图:

TCP-3-handshake-example.jpg

2.2. TCP四次挥手

在断开TCP连接时,主要有四个操作:

  1. client发送一个FIN包给server端:我要断开连接了
  2. server端回复client端一个ACK包:好,我知道了
  3. server端发送一个FIN包给client端:那我关闭连接了
  4. client恢复一个ACK包给server:好的

把上面的图改了一下:
TCP-4-byes-example.png

3. 准备知识

3.1. 对称加密

对称加密值得是加密解密都是用同一个密钥。对称加密只有一个密钥,作为私钥。

常见的对称加密算法:DES,AES,3DES等。

对称加密加密和解密使用的是同样的密钥,所以速度较快。但正因为只依赖一个密钥,密钥一旦暴露,便毫无秘密可言,所以安全性不高。

3.2. 非对称加密

非对称加密有两个密钥,一个公钥,一个密钥。加密和解密使用不同的密钥。公钥加密的信息,只有私钥才能解密;私钥加密的信息,只有公钥才能解密。

常见的非对称加密算法:RSA,ECC等。

非对称加密使用了公钥和密钥一对密钥,安全性较高,但是加密与解密的速度较慢。

4. HTTPS工作流程

说了这么多,终于到了本文的主要内容:HTTPS工作过程。HTTPS是建立在HTTP基础之上的,因此在进行HTTPS连接之前,TCP的三次握手需要先执行。然后才是HTTPS的连接建立。上面说到的对称加密和非对称加密也会在过程中看到。下图是https过程:

HTTPS-progress.png

  1. client请求server。这一步向server发送客户端支持的加密协议,SSL版本信息等。

  2. server接收到请求之后,确定加密方式,以证书的形式回应client,其中包含证书公钥以及一些其他信息。

    HTTPS-SSL-info.png

  3. client收到响应之后会验证证书是否有效,如果无效则提示警告信息(自己生成证书就会出现)。如果有效,客户端会生成一个随机数(会话密钥),并用公钥进行加密,然后传递给server。

  4. server收到公钥解密的内容,利用私钥进行解密获得客户端生成的随机数(会话密钥)[非对称加密]。然后server将获得的随机数当成私钥堆数据加密一段数据,作为握手消息发送给client。

  5. client使用之前生成的会话密钥对server回应的消息进行解密[对称加密]。至此https连接建立完成。

  6. 后续会话数据传输client发送给server的消息均通过会话密钥进行加密,server通过会话密钥进行解密处理。server响应给client也通过会话密钥进行加密,client通过会话密钥解密呈现给用户。

HTTPS在建立连接的过程中通过非对称加密进行会话密钥的传输,待连接建立成功之后,会话密钥只有客户端和服务端知道,后续的所有数据传输均通过会话密钥进行对称加密。这样可以使后续的数据传输速度更快。

参考资源

posted @ 2020-09-20 21:55  六月瓜  阅读(190)  评论(0编辑  收藏  举报