面试官的几句话,差点让我挂在HTTPS上

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

 面试官的几句话差点让我挂在HTTPS上

目录导读

一、HTTP 协议

二、HTTPS 协议

三、使用 HTTP 协议还是 HTTPS 协议呢

四、HTTP 协议和 HTTPS 协议的区别


作为软件测试大家都知道一些常用的网络协议是我们必须要了解和掌握的比如 HTTP 协议HTTPS 协议就是两个使用非常广泛的协议所以也是面试官问的面试的时候问的比较多的两个协议而且因为这两个协议有相似和关联的地址面试官为了考察你对其掌握的深度经常会问的一个问题就是你能说说 http 协议和 https 协议的区别么
 

一、HTTP 协议

其实对于 http 协议大家可能都比较熟悉。HTTP 协议全称是 Hyper Text Transfer Protocol超文本传输协议。它是在 TCP 三次握手建立了链接的基础上工作的所以 http 协议是基于 TCP 协议的 80 端口的应用层协议主要作用是用于从万维网 WWW 传输资源到本地浏览器的传送协议。

HTTP 协议做的事情主要是用来规定客户端和服务端的数据传输格式所以它是一个标准和规范。那它是怎么定义这个规范的呢这就需要我们来看一下这个协议的具体内容了。我们接下来就用 fiddler 抓包来直观地看一下这个报文的内容

每一个 http 连接包括请求消息和响应消息两个部分 就像你在浏览器里发送要访问百度页面的请求那么百度服务器就会返回给我一个响应并展示百度页面所以 HTTP 协议都是基于请求和响应模式的。

请求消息

首先我们来看下 HTTP 协议请求消息也就是 http request指从客户端到服务端的请求消息包括以下信息

请求行包括请求方法GET、POST 等请求地址 uriHTTP 版本等信息

请求头包括的内容非常多比如 content-type客户端传递到服务器端的数据格式User-Agent标明客户端的基本信息等

空一行是格式要求表示请求头的结束

请求体就是请求正文一般是参数等信息

具体抓包显示如下图

响应消息

服务器收到客户端的请求后就会给出响应也就是 http response同样包括以下四个部分信息

响应行包括 http 版本以及响应状态码信息

响应头同样包括的内容比较多比如 Content-Type响应消息的格式cookie\token 等信息

空一行标识着响应头的结束

响应正文从服务响应回来的具体数据比如 XML、JSON 格式的数据这个也是做接口测试要重点查看的内容。

通过以上抓包信息我们也可以看出来 http 协议有如下几个特点

  1. 通信使用的明文进行数据传输的任何一个中间截取者都可以截取数据进行篡改
  2. 请求的客户端和响应的服务器端不会对通信双方进行身份的确认这样就可能会导致任何人都可以假冒成为通讯方而不被发现
  3. 也没有校验和保护数据的完整性的机制被篡改的数据没有办法被通讯双方所发现。

但是随着互联网的不断发展我们越来越多的业务都在网上进行对于安全性就越来越重视。所以针对 HTTP 协议这些不安全的特点一个新的协议就应运而生它就是 HTTPS 协议

二、HTTPS 协议

HTTPS全称是 Hyper Text Transfer Protocol Secure超文本传输安全协议是以安全为目标的 HTTP 通道简单讲就是 HTTP 协议的安全版。

那么它是怎么实现安全性的呢看下图

从图我们可以清晰的看到HTTPS 协议就是在 HTTP 协议和 TCP 协议之间加入了 SSL 层所以它的安全性就是通过 ssl 协议来实现的。所以 HTTPS 协议也经常被叫做披着 SSL 外壳的 HTTP 协议

那么这个 SSL 协议能提供哪些安全性呢给大家列一个公式HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

SSL 握手过程

具体这些安全性机制如何实现的我们就需要来看一下 HTTPS 的工作流程。下图是 SSL 建立连接的握手过程

以上过程我们文字解释一下

1.客户端通过发送 Client Hello 报文开始 SSL 通信

客户端发起请求以明文传输请求信息包含版本信息加密套件候选列表压缩算法候选列表随机数扩展字段等信息。

相关信息如下
• 支持的最高 TSL 协议版本 version从低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2当前基本不再使用低于 TLSv1 的版本;
• 客户端支持的加密套件 cipher suites 列表 每个加密套件对应前面 TLS 原理中的四个功能的组合

认证算法 Au (身份验证)

密钥交换算法 KeyExchange(密钥协商)

对称加密算法 Enc (信息加密)

信息摘要 Mac(完整性校验);

2.服务器可进行 SSL 通信时会以 Server Hello 报文应答

服务端返回协商的信息结果包括选择使用的协议版本 version选择的加密套件 cipher suite选择的压缩算法 compression method、随机数 random_S 等其中随机数用于后续的密钥协商;

3.服务器发送 Certificate 证书报文

服务器端配置对应的证书链用于身份验证与密钥交换; 报文中包含公开密钥证书客户端可以通过证书验证服务器的身份这就是防止的第三方假冒身份保证的通讯双方的身份真实性。

4.服务器发送 Server Hello Done 报文通知客户端

这个报文的发送通知客户端 server_hello 信息发送结束就标识着最初阶段的 SSL 握手协商部分结束。

5.客户端以 Client Key Exchange 报文作为回应

客户端收到服务器的证书后会去验证证书的合法性如果验证通过才会进行后续通信否则根据错误情况不同做出提示和操作。

证书的合法性验证通过之后客户端计算产生随机数字 被称为 Pre-master secret 的随机密码串并用证书公钥加密发送给服务器; 该报文已用步骤 3 中的公开密钥进行加密。

此时客户端已经获取全部的计算协商密钥需要的信息两个明文随机数 random_C 和 random_S 与自己计算产生的 Pre-master计算得到协商密钥。

6.接着客户端继续发送 Change Cipher Spec 报文

客户端通过该报文通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。

7.客户端发送 Finished(encrypted_handshake_message) 报文

结合之前所有通信参数的 hash 值与其它相关信息生成一段数据采用协商密钥 session secret 与算法进行加密然后发送给服务器用于数据与握手验证; 该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功要以服务器是否能够正确解密该报文作为判定标准。

8.服务器同样发送 Change Cipher Spec 报文

服务器用私钥解密加密的 Pre-master 数据基于之前交换的两个明文随机数 random_C 和 random_S计算得到协商密钥enc_key=Fuc(random_C, random_S, Pre-Master)然后计算之前所有接收信息的 hash 值并解密客户端发送的 encrypted_handshake_message验证数据和密钥正确性;

验证通过之后服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信;

9.服务器同样发送 Finishedencrypted_handshake_message报文

服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 session secret 与算法加密并发送到客户端。

客户端计算所有接收信息的 hash 值并采用协商密钥解密 encrypted_handshake_message验证服务器发送的数据和密钥验证通过则握手完成。

10.开始进行应用层协议的通信即发送 HTTP 请求。

服务器和客户端的 Finished 报文交换完毕之后SSL 连接就算建立完成。开始正式发送 HTTP 通信消息发送的是 http 的请求消息当然通信报文都会受到 SSL 的保护。

应用层发送数据时会附加一种叫做 MACMessage Authentication Code的报文摘要。MAC 能够查知报文是否遭到篡改从而保护报文的完整性。

11.应用层协议通信即发送 HTTP 响应。

12.最后由客户端断开连接。断开连接时发送 close_notify 报文。

上图做了一些省略这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信。

通过以上 12 步的解析我们可以清楚的看到 SSL 是如何给数据提供安全性的

1通过证书来验证通信双方的身份吗保证身份的真实可靠防止第三方假冒

2通过协商出来的秘钥进行通信数据的加密保证数据不会被被任何数据截取者看到保证的数据的机密性

3通过 MAC 的报文摘要确保数据没有被篡改保证了数据的完整性。

 

三、使用 HTTP 协议还是 HTTPS 协议呢

讲到这里我们会发现 HTTPS 协议确实比 HTTP 协议要安全很多但是我们平时生活中还是会看到有些网站用的是 http 协议。既然 HTTPS 那么安全可靠那为何所有的 Web 网站不一直使用 HTTPS 呢主要的原因有以下几点

1、对计算机的资源消耗比较大因为与纯文本通信相比加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密会消耗相当多的资源平摊到一台计算机上时能够处理的请求数量必定也会随之减少。

2、通信速度会比较慢和使用 HTTP 相比网络负载可能会变慢 2 到 100 倍。除去和 TCP 连接、发送 HTTP 请求响应以外还必须进行 SSL 通信因此整体上处理通信量不可避免会增加

3.对服务器和客户端的机器性能要求更高由于大量消耗 CPU 及内存等资源导致处理速度变慢。因为 SSL 必须在服务器和客户端都进行加密处理因此从结果上讲比起 HTTP 会更多地消耗服务器和客户端的硬件资源导致负载增强。

4. 购买证书需要额外的开销要进行 HTTPS 通信证书是必不可少的。而使用的证书必须向认证机构CA购买。证书价格可能会根据不同的认证机构略有不同。通常一年的授权需要 600 -1000+ 人民币。那些购买证书并不合算的服务以及一些个人网站可能只会选择采用 HTTP 的通信方式

四、HTTP 协议和 HTTPS 协议的区别

最后我们来总结一下 http 协议和 https 协议的区别

写在最后

如果你觉得文章还不错请大家 点赞、分享、留言 下因为这将是我持续输出更多优质文章的最强动力

看到这篇文章的人有觉得我的理解有误的地方也欢迎评论和探讨~

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“面试官的几句话,差点让我挂在HTTPS上” 的相关文章