网易面试:说说 Https 原理?Https 如何保证 数据安全?

本文原文链接

45岁老架构 尼恩说在前面

在45岁老架构师 尼恩的读者交流群(100+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格,遇到很多很重要的相关面试题:

  • http为什么不安全? 为啥用 HTTPS ?
  • 说一下 HTTPS 的执行流程?
  • HTTPS 是如何保证传输安全的?
  • 说说 https 原理 ? HTTPS 是如何保证传输安全的?

最近有小伙伴面试网易,都问到了这个面试题。 小伙伴没有系统的去梳理和总结,所以支支吾吾的说了几句,面试官不满意,面试挂了。

所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。

当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典PDF》V175版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】获取

1:http的原理和不安全传输

要说https,必须了解http。

在介绍http的传输过程为啥不安全 这个问题之前, 回顾一下 http的传输过程。

HTTP传输的传输过程

HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML文件,图片文件,查询结果等,一般基于B/S架构,即浏览器作为HTTP客户端通过URL向HTTP服务端(WEB服务器)发送所有请求。

45岁老架构师图解一下HTTP传输的传输过程(以访问百度为例):

在这里插入图片描述

对上图的 HTTP传输的传输过程(以访问百度为例)进行介绍,大致如下:

  1. 域名解析(DNS 查询)
    • 当你在浏览器(如 Chrome、Firefox 等)中输入 “www.baidu.com” 并按下回车键后,浏览器首先会进行域名解析。它会向本地 DNS 服务器(通常由你的网络服务提供商提供)发送一个 DNS 查询请求,询问 “www.baidu.com” 对应的 IP 地址。
    • 本地 DNS 服务器如果缓存中有这个 IP 地址,就会直接返回;如果没有,它会向更高级别的 DNS 服务器(如根 DNS 服务器、顶级域名 DNS 服务器等)进行查询,直到获取到百度服务器的 IP 地址(例如,百度服务器的 IP 可能是 14.215.177.38 等)。这个过程就像是在电话本中查找一个电话号码一样,通过域名找到对应的服务器位置。
  2. 建立 TCP 连接(三次握手)
    • 浏览器在获取到百度服务器的 IP 地址后,就会开始建立 TCP(传输控制协议)连接。这是一个可靠的面向连接的协议,用于保证数据的准确传输。
    • 第一次握手:浏览器(客户端)向百度服务器(服务器端)发送一个带有 SYN(同步序列号)标志的 TCP 数据包,这个数据包中还包含一个随机生成的序列号(如 SEQ = x),表示客户端想要建立连接并且告知服务器初始序列号。
    • 第二次握手:服务器收到客户端的 SYN 包后,会返回一个带有 SYN/ACK(同步确认)标志的数据包。这个数据包中包含服务器自己生成的 SYN 序列号(如 SEQ = y),同时确认收到客户端的序列号(ACK = x + 1),表示服务器同意建立连接并且也告知客户端自己的初始序列号。
    • 第三次握手:客户端收到服务器的 SYN/ACK 包后,会发送一个带有 ACK 标志的数据包,确认收到服务器的序列号(ACK = y + 1)。至此,TCP 连接建立成功,就像双方通过三次握手确定了通信的规则和起始位置。
  3. 发送 HTTP 请求
    • 建立好 TCP 连接后,浏览器会根据 HTTP 协议向百度服务器发送一个 HTTP 请求。这个请求通常包括请求行、请求头和请求体(如果有)。
    • 请求行包含请求方法(如 GET、POST 等)、请求的资源路径(如 /,表示请求百度首页)和 HTTP 协议版本(如 HTTP/1.1)。例如,一个 GET 请求可能是 “GET / HTTP/1.1”。
    • 请求头包含了许多关于请求的额外信息,如浏览器的类型(User - Agent)、接受的内容类型(Accept)、是否支持压缩(Accept - Encoding)等。例如,“User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36”,这个请求头表明了浏览器是 Chrome 的某个版本,运行在 Windows 10 操作系统的 64 位版本上。
    • 如果是 POST 请求,请求体可能包含用户提交的数据,如在百度登录页面输入的用户名和密码(当然,百度登录实际使用更安全的方式)。
  4. 服务器处理请求并返回响应
    • 百度服务器收到浏览器的 HTTP 请求后,会根据请求的内容进行处理。如果是请求首页,服务器会查找对应的 HTML 文件以及相关的资源文件(如 CSS、JavaScript 等)。
    • 服务器会根据处理结果生成一个 HTTP 响应。响应同样包括响应行、响应头和响应体。响应行包含 HTTP 协议版本、响应状态码和状态消息。例如,“HTTP/1.1 200 OK” 表示请求成功,服务器找到了请求的资源并返回。
    • 响应头包含了关于响应的各种信息,如内容类型(Content - Type),如果返回的是 HTML 文件,可能是 “Content - Type: text/html”;还可能包含内容长度(Content - Length)等信息。
    • 响应体就是服务器返回的实际内容,如 HTML 页面的代码。这个代码会被浏览器接收并用于渲染页面。
  5. 关闭 TCP 连接(四次挥手)
    • 浏览器收到服务器的响应并完成页面渲染后,就会开始关闭 TCP 连接。这是一个四次挥手的过程。
    • 第一次挥手:浏览器(客户端)发送一个带有 FIN(结束)标志的 TCP 数据包,表示客户端想要关闭连接。
    • 第二次挥手:服务器收到客户端的 FIN 包后,会返回一个 ACK 包,表示收到客户端的关闭请求。
    • 第三次挥手:服务器在处理完一些剩余的事务后,也会发送一个带有 FIN 标志的数据包,表示服务器也准备关闭连接。
    • 第四次挥手:客户端收到服务器的 FIN 包后,会发送一个 ACK 包,确认收到服务器的关闭请求。

至此,TCP 连接完全关闭,整个 HTTP 传输过程结束。

HTTP传输的特点:明文传输

在这里插入图片描述

HTTP传输的特点:明文传输

  • 第三步:客户端发生http请求,把一条消息,以明文的方式,发送到服务器。
  • 第四步:客户端发生http请求,服务的响应报文,也是以明文的方式,发回给客户端。

Http 明文传输,主要有这些缺点:窃听风险、篡改风险、冒充风险 :

  • 窃听风险:请求信息明文传输,容易被窃听截取。
  • 篡改风险:数据的完整性未校验,容易被篡改
  • 冒充风险: 没有验证对方身份,存在冒充危险

大家登录的时候,如何账号密码都是明文传输, 在传输链路上,有很多的 中间设备(如WiFi、路由器、交换机、网络嗅探工具等),这样,客户端发出的请求,很容易被中间环节拦截,然后被不法分子截取利用。

因此,HTTP协议不适合传输一些敏感信息,比如:各种账号、密码等信息,使用http协议传输隐私信息非常不安全。

2:http为什么不安全?

HTTP(超文本传输协议)被认为不安全,主要有以下几方面原因:

一、窃听风险:数据传输未加密,容易被窃听截取

HTTP 在传输数据时采用的是明文形式,这意味着数据在网络传输过程中是以原始的、未经过加密处理的文本格式进行发送的。

例如,当用户在网页上输入登录账号和密码等敏感信息时,这些信息会以明文的形式通过网络从客户端(如浏览器)发送到服务器端。

如果在传输过程中被不法分子通过网络嗅探工具(如 Wireshark 等)进行监听,那么他们就能够轻易获取到这些明文数据,进而可能导致用户的账号被盗用、个人隐私信息泄露等严重后果。

二、冒充风险: 缺乏身份验证机制,存在冒充危险

HTTP 本身并没有提供强大的身份验证机制来确保通信双方的真实身份。

对于客户端来说,无法准确确认与之通信的服务器是否真的是其声称的合法服务器。不法分子有可能通过一些手段(如 DNS 劫持等)将用户请求重定向到他们伪造的服务器上,而用户在不知情的情况下就可能会向这个伪造的服务器发送数据。同样,对于服务器端而言,也难以绝对确认请求来自合法的客户端,这就为中间人攻击等安全威胁留下了可乘之机。

三、篡改风险:数据的完整性未校验,容易被篡改

  1. 中间人攻击:由于 HTTP 数据传输未加密且缺乏可靠的身份验证,攻击者可以在客户端和服务器之间的网络路径上进行拦截,充当 “中间人”。他们一方面接收客户端发送的数据,另一方面又伪装成客户端向服务器发送数据,或者反之,这样就可以篡改、窃取传输中的数据。
  2. 数据篡改攻击:因为传输的是明文数据,攻击者一旦截获了传输中的数据,就可以相对容易地对数据内容进行修改,比如篡改订单信息、修改用户提交的表单内容等,然后再将篡改后的内容发送给服务器,而服务器可能无法察觉数据已经被篡改,从而按照错误的信息进行处理。
  3. 重放攻击:攻击者可以截获并记录合法的 HTTP 请求,然后在之后的某个时间再次发送这些请求,就好像这些请求是刚刚由合法用户发出的一样。例如,截获了用户的一次登录请求,然后不断地重放这个登录请求,可能会导致用户账户被异常登录等情况。

3:如何解决 中间环节的传输安全问题?

综上所述,HTTP 的这些特性使其在面对网络安全威胁时较为脆弱,所以在涉及敏感信息传输等场景下,如何解决 中间环节的传输安全

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值