1.基础知识

<mark>http协议</mark>: 是互联网上应用最为广泛的网络协议,是客户端和服务器端请求和应答的标准,是一个从www(万维网)服务器传输超文本到本地浏览器的传输协议,能够使得网络传输更加高效。

<mark>https协议</mark>: 是以安全为目标的http通道,简单讲就是http的安全版本。http通过与ssl加密协议结合实现更安全的传输(https)。

<mark>http宏观通信过程</mark>:

  • 1.客户端向服务器发送请求报文
  • 2.服务器根据请求报文收集对应的组合成响应报文
  • 3.客户端收到响应报文后进行解析渲染

    https宏观通信过程:
  • 1 客户端发送请求到服务端
  • 2 服务端发送数字证书
  • 3 客户端解析并利用证书机构的公钥从证书中取出服务端的公钥
  • 4 客户端生成随机对称密钥(随机数),并利用公钥加密发送给服务端
  • 5 服务端用私钥解密取出对称密钥。
  • 6 双方采用对称加密的方式进行加密传输的http数据,收到后利用对称密钥解密
    这里省却了验证异常的过程,正常的连接大致就是这样。

2.http建立连接的过程:

Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web 是建立在 HTTP 协议上通信的。

  • url请求
  • DNS解析
  • TCP连接
  • 发送HTTP请求
  • 服务器处理请求并返回HTTP报文
  • 解析渲染页面
  • TCP连接结束

3.Socket小插曲

有人说我们C/S用的是 socket连接,也用到TCP,那么HTTPSocket有啥区别?

HTTP是短连接,Socket(基于TCP协议的)是长连接。尽管HTTP1.1开始支持久连接,但仍无法保证始终连接。而Socket连接一旦建立TCP三次握手,除非一方主动断开,否则连接状态一直保持

HTTP连接服务端无法主动发消息,Socket连接双方请求的发送先后限制。HTTP采用“请求-响应”机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回复在后。Socket连接双方类似peer2peer的关系,一方随时可以向另一方喊话。

场景:
<mark>用HTTP的情况</mark>:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等。
<mark>用Socket的情况</mark>:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等

4.https建立连接的过程:

4.1为什么需要https?

http协议传输的数据是<mark>未加密的</mark>,是<mark>明文传输</mark>,所以使用http协议传输一些敏感信息是不安全的,为了实现敏感数据的加密传输,网景公司设计了SSL(Secure Sockets Layer)协议,用于对http协议传输的数据进行加密,从此https协议就产生了。简单来说,https协议是由<mark>ssl+http协议组合而成的加密数据传输协议</mark>,可用于敏感数据传输与网络身份验证,比http协议更加安全。

https采用了<mark>非对称加密+对称加密结合的方式来工作</mark>(主要是ssl来做),因为非对称加密速度慢,所以先利用非对称加密来传输对称加密的密钥,然后再使用对称加密的方式传输。在ssl建立了安全的通信线路后就可以在这条线路上进行http通信了。

4.2对称加密和非对称加密

<mark>对称加密</mark>:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密。

<mark>优点</mark>:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。
<mark>缺点</mark>:在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

<mark>非对称加密</mark>:一对密钥由公钥和私钥组成(可以使用很多对密钥)。私钥解密公钥加密的数据,公钥解密私钥加密的数据(私钥公钥可以互相加密解密)。

私钥只能由一方保管,不能外泄。公钥可以交给任何请求方。

4.3数字证书

非对称加密无法证明公钥本身没有经过伪造,于是可以使用由数字证书认证机构等颁发的公钥证书。

数字证书是一个经证书授权中心数字签名的包含公钥拥有者信息以及公钥的文件。最简单的证书包含一个公钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。

数字证书的生成是这样的:服务端将自己的公钥及相关信息交给证书机构,机构使用其私钥加密服务端的公钥及相关信息,<mark>而客户端(浏览器)在安装的时候就自带了权威数字证书机构的公钥,可以利用证书机构的公钥从数字证书中提取出服务器端的公钥</mark>。

4.4详细过程描述

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

  • 步骤 2: 服务器可进行 SSL通信时,会以 Server Hello 报文作为应 答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务器的 加密组件内容是从接收到的客户端加密组件内筛选出来的。

  • 步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证书。

  • 步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶 段的 SSL握手协商部分结束。

  • 步骤 5: SSL第一次握手结束之后,客户端以 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连接 就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用 层协议的通信,即发送 HTTP 请求。

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

  • 步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信。

原文地址https://mp.weixin.qq.com/s/_gomh2t6E8qXoWyPaLdehA

原创面试复习图(点击菜单获取)