面试官问 HTTPS 是怎么从 HTTP 转过来的,我有点懵

简介: 这段时间毕竟也是 “金九银十” 的面试的黄金季节,阿粉当然也想去面试,但是因为自身受限,所以只能采访一下出去面试的同学们都问了什么内容,其中有一个,阿粉觉得有必要给大家分享一下,就是问关于 HTTP 的内容。

HTTP

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP 是基于 TCP/IP 协议通信协议来传递数据(HTML 文件、图片文件、查询结果等)。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

这其实就是百度百科里面的精简化的内容,虽然说不上太细致,但是已经算是对HTTP做了一个大概的描述,我们接下来就从以下的几个方面来看一下这个HTTP吧。

我们从这里就不再多解释 HTTP报文 和 主体 这些内容了,阿粉之前也是完整的给大家解释过了,包括了 HTTP 的进化历史,阿粉今天我们来讲讲 HTTP 和 HTTPS 的关系。

HTTP缺点

众所周知,HTTP 的优点那可是一大堆:

  1. 简单、灵活、易于扩展
  2. 应用广泛、环境成熟
  3. 无状态 (不需要额外的资源来记录状态信息)

但是 HTTP 的缺点也是非常的显著,为什么这么说,HTTP 使用的是明文的方式进行传输,虽然方便了我们的调试,但是信息会被暴露出来,每一个环节没有隐私可言。

而且 HTTP 在我们的认知当中,他就是一个不安全的,第一个原因是上面说的明文,还有就是 HTTP 不验证通信双方的身份,所以对方的身份有可能伪装,就像某些公共场所的那些 公共WIFI ,还有就是 HTTP 不能验证报文的完整性,所以报文也是有可能被篡改的。

基于这些内容,所以我们很多时候对 HTTP 的选择都比较慎重,不然你传输内容的时候,别人用抓包工具就很容易的能够分析出你想要传递的内容。

这时候我们就想到了一个事情,加密处理一下不就好了?

对,完全没问题,HTTP 没有加密的机制,但是我们可以想办法处理,这个办法就是:

SSL 或者 TLS

SSL: 安全套接层

TLS:安全层传输协议

当他们组合使用的时候,就能够加密 HTTP 的通信的内容了,这时候就能在这条线路上进行通信,而通过 SSL组合使用后的 HTTP 被称为 HTTPS 或者称之为 HTTP overSSL。

HTTPS

大白话说一下,HTTP 在加上加密处理和认证以及完整性保护之后就是 HTTPS。

分辨 HTTPS 最简单的方法就是,你在浏览器访问的时候,能够看到一个小锁的标识。

34.jpg


现在百分之90以上的网站不都是使用的 HTTPS 么,

我们使用抓包工具来看一下 HTTPS 的传输内容试试。

35.jpg

我们从中看到了TLS 的版本,还有阿粉没有截图上的随机数。

这时候我们就得来完整的分析 HTTPS 的安全通信机制了。来看个图看一下 然后我们再拿我们的抓包工具来进行分析。

36.jpg

上面这是 HTTPS 的安全通信的机制,我们分别来看看都干了什么。

第一步:Client Hello

客户端通过 发送 Client Hello 报文开始 SSL/TSL 通信。其中包含了 SSL/TSL 的版本,所使用的加密的方法等一系列的内容。

第二步:Server Hello

服务端根据客户端发送的支持的 SSL/TLS 协议版本,和自己的比较确定使用的 SSL/TLS 协议版本。缺点假面算法等内容。

第三步:服务器发送 Certificate 报文,报文中包含了公开密钥证书。

证书的目的实际上就是保证标识的身份,证书一般采用X.509标准。

第四步:Server Key Exchange

服务器发送 Server Hello Done 报文请求客户端,第一阶段的 SSL/TSL 握手协商部分结束。

也有很多人习惯的第四步是 Server Hello Done 实际上当我们抓包的时候,发现他们是在一次请求中的,我们一会抓包看一下试试。Server Hello Done 实际上就是相当于我给你说我这边发完毕了。

第五步:Client Key Exchange

完成 SSL/TSL 第一次握手之后,客户端就发送 Client Key Exchange 报文作为回应,这里实际上就是为了交换秘钥参数,

37.jpg

这里客户端会再生成一个随机数,然后使用服务端传来的公钥进行加密得到密文PreMaster Key。服务端收到这个值后,使用私钥进行解密,这样两边的秘钥就协商好了。后面数据传输就可以用协商好的秘钥进行加密和解密。

第六步:Change Cipher Spec

客户端发送 Change Cipher Spec 报文,提示服务器编码改变,就是说以后我们再发消息的时候,我是用之前我们定义的密钥进行加密。

第七步:Client Finished

户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息,这一步也是比较关键的一步,这次的操作的成功与否,就得看服务器是否能够成功解密这次的报文来作为判断依据了。

第八步:服务器发送 Change Cipher Spec

第九步:服务器发送Server Finished 报文

实际上作用和 Client 差不多。

第十步:服务端和客户端的 Finished 交换完成了,这时候 SSL/TSL 的连接就OK了,发送信息也就是完整的称为 HTTPS 了。

最后就是进行数据传输的内容了。

既然 HTTPS 都是安全的了,为什么不大范围的广泛使用呢?

实际上加密通信虽然在一定程度上保护了数据的隐私,但是效率比较低,每一次通信都要加密,会消耗资源,如果包含一些钱的肯定那必须得使用加密的通信,而且主要证书要收费呀。

你要想用,那肯定需要证书,就像大家做微信支付的时候,不是也需要购买证书么,一般一年怎么也得几百块钱,所以你知道 HTTP 和 HTTPS 的关系了么?

相关文章
|
28天前
|
缓存 安全 网络协议
一起深入了解http和https的区别
HTTP适合于非敏感信息的传输,而HTTPS则是在要求安全性、隐私保护及信任机制的现代互联网环境中不可或缺的标准配置。随着网络安全意识的提高和技术的发展,越来越多的网站和服务都转向使用HTTPS,力求在提供便捷服务的同时保障用户数据的安全。HTTPS将成为未来的基本选择。
35 0
一起深入了解http和https的区别
|
5天前
|
缓存 安全 网络协议
【面试必备】HTTP和HTTPS是什么?有什么差异?
HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。
12 2
|
21天前
|
安全 数据安全/隐私保护
深入解析:HTTP和HTTPS的三次握手与四次挥手
在这些握手和挥手过程中,双方交换信息,协商参数,建立或关闭连接,以保证数据的可靠传输。HTTPS在此基础上加入了数字证书验证和加密通信,增加了安全性。这些步骤确保了HTTP和HTTPS协议的通信过程的稳定和安全。
111 0
|
28天前
|
数据采集 缓存 前端开发
http和https请求服务器的时候在请求头部分都带什么到服务器呢?
HTTP和HTTPS请求头基本结构相似,HTTPS多了一层SSL/TLS加密。常见请求头如Accept(指定内容类型)、Authorization(身份验证)、Cookie(会话跟踪)、User-Agent(标识用户代理)等。HTTPS特有的头包括Upgrade-Insecure-Requests(升级到HTTPS)、Strict-Transport-Security(强制使用HTTPS)、Sec-Fetch-*(安全策略)和X-Content-Type-Options、X-Frame-Options等(增强安全性)。实际应用中,请求头会根据需求和安全策略变化。
20 0
|
1月前
|
机器学习/深度学习 人工智能 监控
视觉智能平台常见问题之http转https便捷的转换如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
20 0
|
1月前
|
安全 算法 网络协议
一文搞懂HTTP与HTTPS
一文搞懂HTTP与HTTPS
|
1月前
|
存储 缓存 安全
https跳过SSL认证时是不是就是不加密的,相当于http?
https跳过SSL认证时是不是就是不加密的,相当于http?
117 0
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
173 2
|
1月前
|
缓存 安全 网络协议
http和https的区别是什么? (2)
http和https的区别是什么? (2)
17 1
|
1月前
|
存储 Java 关系型数据库
http和https的区别是什么? (1)
http和https的区别是什么? (1)
36 1